Welcome to another chapter of "Abusing Using"! IDisposable has been used or abused (depending on who you ask) to create scopes/contexts of all sorts, from database testing to HTML generation to clipboard overriding. Here's another little (ab)use: thread priority setting, for all those background tasks that eat our CPUs:
public static class ThreadSettings { private class DisposableThreadPriority: IDisposable { private readonly ThreadPriority originalPriority; public DisposableThreadPriority(ThreadPriority p) { originalPriority = Thread.CurrentThread.Priority; Thread.CurrentThread.Priority = p; } public void Dispose() { Thread.CurrentThread.Priority = originalPriority; } } public static IDisposable LowestPriority { get { return new DisposableThreadPriority(ThreadPriority.Lowest); } } }
I like to keep this in an interceptor so I can easily apply it to different components just by adding a couple of lines in my web.config:
public class LowPriorityInterceptor : IInterceptor { public void Intercept(IInvocation invocation) { using (ThreadSettings.LowestPriority) { invocation.Proceed(); } } }
No comments:
Post a Comment