一些有關於C#8.0非同步多執行緒Task的實驗與思考(純屬個人觀點)
阿新 • • 發佈:2020-11-20
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 }