玩轉C#之【非同步程式設】

更新於 2024/10/09閱讀時間約 4 分鐘

介紹

非同步程式設計模式(Asynchronous Programming Patterns)

  • APM 非同步程式設計模型
  • EAP 事件架構非同步模式
  • TAP 以工作為基礎的非同步模式
先在主要以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 使用 BeginEnd 方法
  • EAP須有一或多個方法、事件處理常式委派類型,以及 EventArg 衍生類型
為什麼要有以TAP為基礎的
解決以往用執行緒與其他設計模式所存在的缺點與問題
  • 容易使用、完成,封鎖,除錯、測試、取消、例外異常、回報進度、同步處理
  • 讓非同步程式碼寫起來更輕鬆、可讀性佳和更好維護
關於async/await詳細介紹以及死結造成原因之後會專門寫一篇文章跟大家講解

參考資料

本篇已同步發表至個人部落格
https://moushih.com/2022ithome21/
我的鐵人賽文章
為什麼會看到廣告
avatar-img
8會員
39內容數
我是這個部落格的作者,喜歡分享有關投資 💰、軟體開發 💻、占卜 🔮 和虛擬貨幣 🚀 的知識和經驗。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
一代軍師 的其他內容
介紹 委派的非同步方法 可以透過BeginInvoke執行委派的非同步方法 Action<T>.BeginInvoke(<T> obj,AsyncCallback callback,Object @object) 第一個內容的 obj,只的是要傳入acction委派的參數 第二個AsyncCallb
介紹 📷 定義 處理序(Process) (大陸:進程): 一個程序運行時,占用全部計算資源的總和 執行緒(Thread) (大陸:線程):是作業系統能夠進行運算排程的最小單位。 大部分情況下,它被包含在行程之中,是行程中的實際運作單位。 C#多線程和異步(一)——基本概念和使用方法 執行緒帶來的
介紹 計算機架構相關名詞 📷 中央處理器 (CPU)Central Processing Unit Processors (處理器) Sockets (實體插槽) Cores (實體核心) Logical processors (邏輯核心) 超執行緒(HT)Hyper-Threading Tec
Array 在記憶體中連續分配,而且元素類型是一樣的,長度不變 優點:讀取快,可以使用座標訪問 缺點:新增、刪除慢 記憶體: 📷 範例程式碼: ArrayList 不定長度,在記憶體中連續分配的,元素沒有類型限制,任何元素都是當成object處理,如果是值類型,會有裝箱的操作 優點:讀取快 缺點:
介紹 這章節純看智商 不可逆加密:原文加密後變成密文,但密文沒辦法解密文回原文 可逆加密:原文加密過後的密文,可以在將密文解密回原文 對稱:表示加解密是否使用同一個key MD5 不可逆加密 MD5 使用的命名空間是 System.Security.Cryptography MD5是一種公開的算法
環境安裝 這邊可以先安裝Expression Tree Visualizer工具 Viusla studio 2019 安裝方式: 檔案(ExpressionTreeVisualizer.2019)下載完之後,將檔案複製到此目錄: C:\Program Files (x86)\Microsoft V
介紹 委派的非同步方法 可以透過BeginInvoke執行委派的非同步方法 Action<T>.BeginInvoke(<T> obj,AsyncCallback callback,Object @object) 第一個內容的 obj,只的是要傳入acction委派的參數 第二個AsyncCallb
介紹 📷 定義 處理序(Process) (大陸:進程): 一個程序運行時,占用全部計算資源的總和 執行緒(Thread) (大陸:線程):是作業系統能夠進行運算排程的最小單位。 大部分情況下,它被包含在行程之中,是行程中的實際運作單位。 C#多線程和異步(一)——基本概念和使用方法 執行緒帶來的
介紹 計算機架構相關名詞 📷 中央處理器 (CPU)Central Processing Unit Processors (處理器) Sockets (實體插槽) Cores (實體核心) Logical processors (邏輯核心) 超執行緒(HT)Hyper-Threading Tec
Array 在記憶體中連續分配,而且元素類型是一樣的,長度不變 優點:讀取快,可以使用座標訪問 缺點:新增、刪除慢 記憶體: 📷 範例程式碼: ArrayList 不定長度,在記憶體中連續分配的,元素沒有類型限制,任何元素都是當成object處理,如果是值類型,會有裝箱的操作 優點:讀取快 缺點:
介紹 這章節純看智商 不可逆加密:原文加密後變成密文,但密文沒辦法解密文回原文 可逆加密:原文加密過後的密文,可以在將密文解密回原文 對稱:表示加解密是否使用同一個key MD5 不可逆加密 MD5 使用的命名空間是 System.Security.Cryptography MD5是一種公開的算法
環境安裝 這邊可以先安裝Expression Tree Visualizer工具 Viusla studio 2019 安裝方式: 檔案(ExpressionTreeVisualizer.2019)下載完之後,將檔案複製到此目錄: C:\Program Files (x86)\Microsoft V
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
【尊重,是人際關係的基石】—取自一分鐘,小故事。 蘇東坡和佛印和尚是很好的朋友,但是兩人都喜歡彼此嘲諷對方,每次見了面,不互相較勁一下總不肯罷休。 儘管這樣激烈的脣槍舌劍常常上演,卻似乎沒有減損他們的友誼。 據說,有一天,蘇東坡與佛印兩人一起坐著打禪。 一會兒功夫,蘇東坡睜開眼問佛印:「你看
Thumbnail
(2024年10月3日的小故事思考,2024年10月8日的個人思考紀錄) 【沒有絕對的是與紛非】—取自絕對讓你感悟的小故事 善於思考成就了智者。 智者有兩個徒弟。一次,他們看到屋裏飛進一隻蜜蜂,蜜蜂努力地朝窗外飛,卻被窗上厚厚的玻璃擋住了,一次次徒勞地摔下來。 徒弟甲說:「這隻蜜蜂真是愚
Thumbnail
(2024年10月2日的小故事,2024年10月7日個人思考紀錄) 【郭子儀寵辱不驚】—蕩氣迴腸的90則歷史故事 人獲得了一定的權勢、地位,便容易受到別人的猜忌,也是福禍共生。 唐朝名將郭子儀深知此點,反其道而行,敞開府門,任人探究,結果化凶為吉,平安無事。 郭子儀爵封汾(音同焚
Thumbnail
(2024年10月1日的小故事,2024年10月6日個人思考記錄) 【騎單車的感覺更好】 有一個人因為生意失敗,迫不得已變賣了新購的住宅,而且連他心愛的小跑車也脫了手,所以單車代步。 一日,他和太太一起,約了幾對私交的夫妻出遊,其中一位朋友的新婚妻子因為不知詳情,見到他們夫婦共乘一輛單
Thumbnail
(2024年9月30日的小故事,2024年10月6日個人思考記錄) 【先把事情做對】 一個小徒弟拜師學理髮。徒弟很聰明,學得很認真,手腳也靈活,深得師傅喜歡。學習刮臉刮鬍子時,師傅先讓他在一個大葫蘆瓜上練習。 小徒弟一招一式地練,動作很細很輕,頗得師傅誇讚,就是養成了一個懷習慣:每次練
Thumbnail
進入物件導向設計的實戰階段,我們通過建立人力資源管理功能來實踐理論知識。透過這些實作練習,能夠深化對物件導向概念的理解,並學會如何在實際開發中應用這些概念。
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
Thumbnail
暢銷懸疑小說的《法庭遊戲》改編為電影版,日前也在台灣上映,燒腦的情節加上法庭的諜對諜攻防;再加上永瀨廉、杉咲花、北村匠海三位高人氣演員加持。
Thumbnail
自2020年問世以來,日本潮流品牌Water The Plant便以其獨特的設計理念和色彩豐富的產品系列,在全球潮流文化中掀起了一股正能量的旋風。
Thumbnail
戴姆勒克萊斯勒出產的後輪驅動雙門跑車 Chrysler Crossfire(火線),使用 33% 賓士 SLK 跑車零件,在 2003 年推出,於 2007 年因為公司重組後停產。雖然,1:1 的新車買不起,那買台 1:18 的模型車來玩玩總是可以的。😜
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
【尊重,是人際關係的基石】—取自一分鐘,小故事。 蘇東坡和佛印和尚是很好的朋友,但是兩人都喜歡彼此嘲諷對方,每次見了面,不互相較勁一下總不肯罷休。 儘管這樣激烈的脣槍舌劍常常上演,卻似乎沒有減損他們的友誼。 據說,有一天,蘇東坡與佛印兩人一起坐著打禪。 一會兒功夫,蘇東坡睜開眼問佛印:「你看
Thumbnail
(2024年10月3日的小故事思考,2024年10月8日的個人思考紀錄) 【沒有絕對的是與紛非】—取自絕對讓你感悟的小故事 善於思考成就了智者。 智者有兩個徒弟。一次,他們看到屋裏飛進一隻蜜蜂,蜜蜂努力地朝窗外飛,卻被窗上厚厚的玻璃擋住了,一次次徒勞地摔下來。 徒弟甲說:「這隻蜜蜂真是愚
Thumbnail
(2024年10月2日的小故事,2024年10月7日個人思考紀錄) 【郭子儀寵辱不驚】—蕩氣迴腸的90則歷史故事 人獲得了一定的權勢、地位,便容易受到別人的猜忌,也是福禍共生。 唐朝名將郭子儀深知此點,反其道而行,敞開府門,任人探究,結果化凶為吉,平安無事。 郭子儀爵封汾(音同焚
Thumbnail
(2024年10月1日的小故事,2024年10月6日個人思考記錄) 【騎單車的感覺更好】 有一個人因為生意失敗,迫不得已變賣了新購的住宅,而且連他心愛的小跑車也脫了手,所以單車代步。 一日,他和太太一起,約了幾對私交的夫妻出遊,其中一位朋友的新婚妻子因為不知詳情,見到他們夫婦共乘一輛單
Thumbnail
(2024年9月30日的小故事,2024年10月6日個人思考記錄) 【先把事情做對】 一個小徒弟拜師學理髮。徒弟很聰明,學得很認真,手腳也靈活,深得師傅喜歡。學習刮臉刮鬍子時,師傅先讓他在一個大葫蘆瓜上練習。 小徒弟一招一式地練,動作很細很輕,頗得師傅誇讚,就是養成了一個懷習慣:每次練
Thumbnail
進入物件導向設計的實戰階段,我們通過建立人力資源管理功能來實踐理論知識。透過這些實作練習,能夠深化對物件導向概念的理解,並學會如何在實際開發中應用這些概念。
Thumbnail
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
Thumbnail
暢銷懸疑小說的《法庭遊戲》改編為電影版,日前也在台灣上映,燒腦的情節加上法庭的諜對諜攻防;再加上永瀨廉、杉咲花、北村匠海三位高人氣演員加持。
Thumbnail
自2020年問世以來,日本潮流品牌Water The Plant便以其獨特的設計理念和色彩豐富的產品系列,在全球潮流文化中掀起了一股正能量的旋風。
Thumbnail
戴姆勒克萊斯勒出產的後輪驅動雙門跑車 Chrysler Crossfire(火線),使用 33% 賓士 SLK 跑車零件,在 2003 年推出,於 2007 年因為公司重組後停產。雖然,1:1 的新車買不起,那買台 1:18 的模型車來玩玩總是可以的。😜