介紹 非同步程式設計模式(Asynchronous Programming Patterns) APM 非同步程式設計模型 EAP 事件架構非同步模式 TAP 以工作為基礎的非同步模式 先在主要以TAP APM (Asynchronous Programming Model) 非同步程式設計模型.NET Framework 1.1 EAP (Event-based Asynchronous Pattern) 事件架構非同步模式.NET Framework 2.0 / 3.5 TAP (Task-based Asynchronous Pattern) 以工作為基礎的非同步模式.NET Framework 4.0 首次搭載 TPL (Task Parallel Library) 工作平行程式庫.NET Framework 4.5 則可搭配 C# 的 async/await 語法大幅簡化 TPL 的使用.NET Core 1.0+ / .NET 5+ 都強烈建議使用 TAP 進行非同步開發! 以TASK 為基礎的非同步模式 Parallel programming architecture in .NET📷 非同步開發在TAP出現前有不低的進入門檻 僅有 Thread、APM、EAP 技術可以選擇 無法使用同步設計邏輯來進行設計,不好維護 遇到 Callback 內又有 Callback 的情境 (Callback Hell) 需要將程式碼從一個同步內容封裝到另一個同步內容內 面對例外異常將會不好處理 對於取得非同步執行結果需要額外進行處理 以TASK為基礎的非同步模式 使用單一方法表示非同步作業的啟始APM 要有 Begin /執行、EAP 要有啟動方法 與 完成事件 也可以使用類似 Callback 的委派事件 該模式要求用具有 Async 後綴命名方法 配合 C# 5.0 的 async / await 關鍵字,可以用同步程式的思維模式設計出非同步的程式碼 支援取消、進度、狀態、異常例外處理 📷 什麼是「工作」(Task) Task 類別的代表單一作業不會傳回值,而此通常以非同步方式執行 但也會有例外,例如:該工作一執行,立即就結束了Task類別代表有 TResult 型別的回傳值 表示有某些事情需要些時間完成計算機科學術語,代表 未來future 與承諾promise所謂未來與承諾,指的是將來一定會完成指定的作業 因為所執行的工作 Task 物件通常是從執行緒集區執行緒上取得執行緒來以非同步方式執行,而不是以同步方式在主應用程式執行緒中,您可以使用 Status 屬性,或者IsCanceled、IsCompleted 及 IsFaulted 屬性,以判斷工作的現在執行結果狀態。 在某些方面,工作類似執行緒或 ThreadPool 工作項目,但為等級較高 抽象 封裝執行緒表示作業系統要處理工作的基本單元 比使用執行緒提供更多的程式設計控制能力與容易除錯 你可以想像 Task 就是一張工單 (Worksheet)你可以開好工單之後,等待工作完成,同時還可以刷一刷抖音(TikTok)當工作完成時,會有人主動告訴你結果,或是通知你工作已完成 使用 單一方法 表示非同步作業啟始和完成其他模式比較 APM 使用 Begin 和 End 方法 EAP須有一或多個方法、事件處理常式委派類型,以及 EventArg 衍生類型 為什麼要有以TAP為基礎的 解決以往用執行緒與其他設計模式所存在的缺點與問題 容易使用、完成,封鎖,除錯、測試、取消、例外異常、回報進度、同步處理 讓非同步程式碼寫起來更輕鬆、可讀性佳和更好維護 關於async/await詳細介紹以及死結造成原因之後會專門寫一篇文章跟大家講解 參考資料 C# 開發實戰:非同步程式開發技巧 本篇已同步發表至個人部落格https://moushih.com/2022ithome21/ 我的鐵人賽文章 https://ithelp.ithome.com.tw/articles/10292664