1。Task的使用
创建一个Task,有三种方式
1 //第一种 2 Task t1 = new Task(() => 3 { 4 Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss fff")+ ":Task创建完成1"); 5 }); 6 //启动task 7 t1.Start(); 8 9 //第二种 10 //Task工厂,Task自动启动 11 Task t2 = Task.Factory.StartNew(() => 12 { 13 Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss fff") + ":Task创建完成2"); 14 }); 15 16 //第三种 17 Action action = new Action(Test); 18 Task t3 = new Task(action); 19 t3.Start(); 20 public static void Test() 21 { 22 Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss fff") +":Task创建完成3"); 23 24 } 25 Thread.Sleep(3000); 26 Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss fff") +":线程完成");
注:t1、t2、t3任务同时开启时,为异步执行。如下图:
如果想同步执行,使用 Wait();
1 Task t1 = new Task(() => 2 { 3 Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss fff")+ ":Task创建完成1"); 4 }); 5 //启动task 6 t1.Start(); 7 8 t1.Wait(); 9 //Task工厂,Task自动启动 10 Task t2 = Task.Factory.StartNew(() => 11 { 12 13 Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss fff") + ":Task创建完成2"); 14 15 }); 16 t2.Wait(); 17 18 Action action = new Action(Test); 19 Task t3 = new Task(action); 20 t3.Start(); 21 t3.Wait(); 22 23 Thread.Sleep(3000); 24 Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss fff") +":线程完成"); 25 26 27 28 public static void Test() 29 { 30 Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss fff") +":Task创建完成3"); 31 32 33 }
当有多个Task进行同步执行时。可使用
Task.WaitAll(t1,t2,t3);
注:这里t1、t2、t3任务之间执行先后顺序为异步。