1. 程式人生 > 實用技巧 >一些有關於C#8.0非同步多執行緒Task的實驗與思考(純屬個人觀點)

一些有關於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 }