Asp.net 使用线程池实例
实际开发经常会使用线程,如果每次使用都是创建线程、启动线程,然后销毁线程,从性能上来讲,非常占用系统开销,当线程达到一定量的时候会影响程序的运行和处理效率。
使用线程池:
好处:
线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务;减少在创建和销毁线程上所花的时间以及系统资源的开销;线程池不仅能够保证内核的充分利用,还能防止过分调度。
缺点:
线程池中的线程不能手动开始,取消,我们只是把函数(方法)排入线程池,剩下的都是系统自动完成,所以相对线程有更多操作,就不适合用线程池。
实例:
class Program { internal delegate void MyAsyncFun(string i); static void Main(string[] args) { var str = "This is params";//可以将对象序列化后作为参数 //启动线程 ThreadPool.QueueUserWorkItem(PostAsync, str); Console.ReadKey(); } private static void PostAsync(object obj) { MyAsyncFun caller = MyAsyncFunDetail; caller.BeginInvoke(obj.ToString(), MyCallBack, caller); } private static void MyCallBack(IAsyncResult ar) { var caller = (MyAsyncFun)ar.AsyncState; caller.EndInvoke(ar); } //具体处理方法 private static void MyAsyncFunDetail(string str) { Console.Write(str + Thread.CurrentThread.Name); } }
实际项目中,再需要的地方执行 ThreadPool.QueueUserWorkItem(PostAsync, str) 即可执行一个线程处理自己的逻辑。