從 async 和 await 開始一路深究到底

 

原本也沒深究過這個,用的多了,完全憑藉經驗辦事,理論差的一塌糊塗,最近不流行那個openai,於是在偉大的人工智能輔導下好好梳理一遍理論知識

 

初步理論認知

async 和 await 是 C# 語言中用於異步編程的關鍵字,主要作用是讓代碼在等待異步操作完成的時候繼續執行,從而達到不會阻塞線程的效果

async 關鍵字用於標記異步方法,就是宣告我這是我個異步方法

await 關鍵字來等待自己裏面其他異步操作方法完成(就套自己類型的娃)

然後是,異步操作將在後臺線程上執行,直到它完成。 

通俗概括一下就是,例如我請求A接口這個異步方法,隨即程序立馬返回Task對象,並同時用後臺新線程執行(就是從.Net程序池內拿出個線程用)

 

.Net程序池

.NET 線程池是一種由 .NET 運行時維護的線程池,它在應用程序啓動時自動創建一組線程,並在需要時從線程池中獲取線程來執行任務,上面說的異步在後臺線程執行就是從這拿

面試必備話術

好處是可以避免不必要的線程創建和銷燬開銷,同時能夠更好地利用現有的線程資源,提高應用程序的性能和吞吐量

創建異步操作時,並不一定會創建新的線程,而是將操作提交給線程池中的一個線程來執行。這個線程通常稱爲工作線程或後臺線程,因爲它在後臺執行任務,不會阻塞當前線程

線程池中默認創建的工作線程數是由操作系統和運行時版本決定的,具體數量可以通過 ThreadPool.GetMinThreads 方法和 ThreadPool.GetMaxThreads 方法獲取

.NET Core 3.1 和 .NET 5.0 版本中,線程池中默認創建的工作線程數是 1000 個

線程池的大小並不是無限制的

線程池中工作線程的最佳數量取決於應用程序的負載和需求

 

衍生擴展

 

感言

寫代碼也有七八年了,做過無數各式各樣的系統,ERP,OA,PMS,HIS...  各種各樣的業務需求,這七八年裏從crud、到設計封裝公司框架、到玩docker、搞微服務。

從.Net Framework 到 .Net 6,從winform到WPF

從 js jq  寫到現在的uniapp 和 vue3, 從css 到 scss,ES6, Typescript ...

一路走來90%的實踐經驗,不足10%的理論記憶...

導致反而工作久了,面臨着面試困難,實在面對面試官的標準提問,實在是難以讓人家滿意,問項目還有各種技術作用問題,解決方案吧,常掛在嘴邊的也總是說看具體業務

唉,幹越久,越難幹,倒不是技術難,至少我對技術的追求熱情從未散去,而是準備簡歷和麪試難一度讓我懷疑人生,這逼不得已回頭看,藉助當下流行的ai大哥幫我完整的背誦一下‘標準答案’

那個曾經發誓堅決不背面試題的少年,已經不在了,終究敗給現實

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章