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)  即可执行一个线程处理自己的逻辑。

猜你喜欢

转载自www.cnblogs.com/qk2014/p/10333427.html