2019年5月23日 星期四

c# async 和 await 簡易說明

函式前面增加 async 就會成為異步函式(執行過程中不會等待函式執行完畢才往下跑)

  1. /// <summary>
  2. /// 異步函式
  3. /// </summary>
  4. static async void AsyncFun()
  5. {
  6. // 裡面要有 await 關鍵字
  7. // await 後面要接回傳 Task 的函式
  8. // 因為回傳 Task 簡稱他為異步任務
  9. Listformatter f_ = new Listformatter>{
  10. new Formatter("「異步任務」", Color.Red)};
  11. Print("執行 {0} 『開始』", Color.Yellow, f_.ToArray());
  12. bool ret_ = await DelayFun();
  13. Print("執行 {0} 『結束』", Color.Yellow, f_.ToArray());
  14. }

異步函式內需要有await 關鍵字
await 後面要接回傳 Task 的函式
因為回傳 Task 簡稱他為異步任務

  1. /// <summary>
  2. /// 異步任務
  3. /// </summary>
  4. /// <returns>true</returns>
  5. static Taskbool DelayFun()
  6. {
  7. return Task.Run(() =>
  8. {
  9. ListFormatter f_ = new ListFormatter>{
  10. new Formatter("等待五秒", Color.YellowGreen)};
  11. Print("{0} 開始", Color.Red, f_.ToArray());
  12. Thread.Sleep(5000);
  13. Print("{0} 結束", Color.Red, f_.ToArray());
  14. return true;
  15. });
  16. }


異步函式呼叫與一般函式一樣
只差在執行中不等待函式執行完
  1. static void Main(string[] args)
  2. {
  3. ....
  4. // 異步函式
  5. ListFormatter f0_ = new ListFormatter>{
  6. new Formatter("「異步函式」", Color.Red)};
  7. Print("執行 {0} 開始", Color.Green, f0_.ToArray());
  8. AsyncFun();
  9. Print("執行 {0} 結束", Color.Green, f0_.ToArray());
  10. ....
  11. }


最後可以看到「異步任務」
在程式執行完畢後
才把任務跑完











沒有留言:

Visual Studio 2017/2019 推薦的擴充功能與更新

參考文章: 覺得 Google 的 Blogger 不太順手?透過 HTML 的 iframe 移花接木 HackMD