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; }
常规用法到此结束。
未完待续。。。。