ThreadPool 线程池 多线程 等待 回调函数 获取返回值

ThreadPool 出现于2.0时代

线程池:预先准备好线程,少了会补充,多了会销毁多余部分

价值:速度快


基本代码

包含最基本的使用

 //多线程
            Console.WriteLine("开始");
            WaitCallback act = t =>
                {
                    Thread.Sleep(1000);
                    Console.WriteLine("进入了方法,参数为{0},线程ID{1}", t.ToString(), Thread.CurrentThread.ManagedThreadId);
                };

            for (int i = 0; i < 5; i++)
            {
                ThreadPool.QueueUserWorkItem(act, i);
            }
            Console.WriteLine("结束");

结果

ThreadPool 线程池 多线程 等待 回调函数 获取返回值_第1张图片


升级版

包含多线程+等待+回调函数+获取返回值

public static Dictionary md = new Dictionary();

        public static void Do2()
        {
            //多线程+等待+回调函数+获取返回值
            Console.WriteLine("开始");
            WaitCallback wat = t =>
            {
                string Rval = FirstFun(t);
                CallBack();
                Console.WriteLine("获取结果为{0}", Rval);
            };



            //循环实现多线程
            for (int i = 0; i < 5; i++)
            {
                ThreadPool.QueueUserWorkItem(wat, i);
                md.Add(i, new ManualResetEvent(false));
            }

            for (int i = 0; i < md.Count; i++)
            {
                md[i].WaitOne();
            }



            Console.WriteLine("结束");
            Console.Read();
        }

        //主方法
        public static string FirstFun(object t)
        {
            Thread.Sleep(1000);
            Console.WriteLine("进入方法了,参数{0},线程ID{1}", t.ToString(), Thread.CurrentThread.ManagedThreadId);
            md[(int)t].Set();//标记该线程执行完成
            return t.ToString();
        }
        //回调
        public static void CallBack()
        {
            Thread.Sleep(1000);
            Console.WriteLine("进入了回调函数,当前线程ID为{0}", Thread.CurrentThread.ManagedThreadId);
        }


结果


ThreadPool 线程池 多线程 等待 回调函数 获取返回值_第2张图片




你可能感兴趣的:(异步,线程)