一些有关于C#8.0异步多线程Task的实验与思考(纯属个人观点)
Task类(类似于线程池)是与thread互补,而非独立的。可以在普通的void类型的语句改写成为Task类型的语句,实现异步方法的改写目的。
1.先创建一个实现Task类任务接口的,或者创建一个Task方法
2.再创建一个方法调用前一个Task任务,并在这个方法中添加async和await
1 //调用一组aysnc异步 2 public static Task Ta1Async(int num) 3 { 4 num += num; 5 return Task.CompletedTask; 6 7 } 8 public static async Task<int> taskd(int x) 9 { 10 await Ta1Async(x); 11 12 return x; 13 } 14 15 static void Write1() 16 { 17 Console.WriteLine(taskd(3).Result); 18 19 }
Task的delay正确用法
1 //Task.Delay所执行的线程休眠是与主线程平行的等待,需要加入await来进行顺序执行 2 static async Task Sleeping() 3 { 4 await Task.Delay(2000); 5 Console.WriteLine("done"); 6 } 7 8 static async void Runing() 9 { 10 await Sleeping(); 11 }
Task顺序实验
1 static async void Listk() //初始化主线程 2 { 3 Console.WriteLine("start"); //创建主线程的方法 4 await Task.Delay(3000); //将一个Task方法放入主线程 5 Task.Run(()=> Console.WriteLine("end")); //创建一个与主方法并行的方法 6 7 await Task.Run(() => Console.WriteLine("run")); //创建一个线程放入主线程序列 8 } 9 static void InDoor() 10 { 11 Task task = new Task(() => Console.WriteLine("task")); 12 task.ConfigureAwait(false); //使该线程封闭式运行,不与其他线程提交状态,节约线程开销 13 }
浙公网安备 33010602011771号