Task多线程的常规用法

Task被认为优于线程池

利用拉姆达表达式和本身的泛型支持,可以轻松实现指向常用的方法。

常用用法和总结如下:

static void Main(string[] args)
        {
            //Task t3 = new Task(() => add1(-25,-29));
            //t3.Start();
            Task t3 = Task.Run(() => add1(-25, -29));//上两行的立即模式

            //Task<int> t4 = new Task<int>(() => add2(66,77));
            //t4.Start();
            Task<int> t4 = Task.Factory.StartNew(() => add2(66, 77));//上两行的立即模式,不用start
            //Task<int> t4 = Task.Run<int>(() => add2(66, 77));//同上一行

            t3.Wait(1000);//程序等待t3一秒(暂停)
            //Task[] ta = new Task[] { t3, t4 };
            //Task.WaitAll(ta);//同步等待(暂停)无返回
            //Task.WhenAll(ta).ContinueWith((t) => Console.WriteLine("lalala"));//异步等待(后续)when会新建一个任务

            //Task.WhenAll<int>()....
            //用法理解:异步,所有任务返回结果,结果组成结果集,被整个方法返回的任务以"result[]"属性的方式呈现。

            //以下两种,用法与all类似
            //Task.WaitAny();//返回整数,表示最先完成的task在数组中的下标。超时为-1
            //Task.WhenAny();//返回最先完成的任务

            if(t3.IsCompleted)
            {
                Console.WriteLine("ok");
            }
            else
            {
                Console.WriteLine("no");
            }
            Console.WriteLine(t4.Result);
            Console.ReadKey();
        }
        static void add1(int x, int y)
        {
            Thread.Sleep(2000);
            Console.WriteLine( x + y);
        }
        static int add2(int x,int y)
        {
            return x+y;
        }

常规用法到此结束。

未完待续。。。。

猜你喜欢

转载自www.cnblogs.com/wanjinliu/p/12673917.html
今日推荐