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

来源:https://www.cnblogs.com/ncellit/archive/2023/02/21/17139554.html
-Advertisement-
Play Games

原本也沒深究過這個,用的多了,完全憑藉經驗辦事,理論差的一塌糊塗,最近不流行那個openai,於是在偉大的人工智慧輔導下好好梳理一遍理論知識 初步理論認知 async 和 await 是 C# 語言中用於非同步編程的關鍵字,主要作用是讓代碼在等待非同步操作完成的時候繼續執行,從而達到不會阻塞線程的效果 ...


 

原本也沒深究過這個,用的多了,完全憑藉經驗辦事,理論差的一塌糊塗,最近不流行那個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大哥幫我完整的背誦一下‘標準答案’

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

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文已收錄至Github,推薦閱讀 👉 Java隨想錄 微信公眾號:Java隨想錄 CSDN: 碼農BookSea 當我們的應用單實例不能支撐用戶請求時,此時就需要擴容,從一臺伺服器擴容到兩台、幾十臺、幾百台。此時我們就需要負載均衡,進行流量的轉發。下麵介紹幾種負載均衡的方案。 DNS負載均衡 一 ...
  • 定義常量 const與#define的區別: A. const常量具有類型,編譯器可以進行安全檢查,#define沒有類型,只是簡單替換字元串 B. const只能定義整數或枚舉的常量 const修飾變數 必須初始化 不可修改 指針與const const位於*左側(const int * a):c ...
  • 排序是一個Java開發者,在日常開發過程中隨處可見的開發內容,Java中有豐富的API可以調用使用。在Java語言中,作為集合工具類的排序方法,必定要做到通用、高效、實用這幾點特征。主要探討java中排序方法所使用的演算法,以及那些是值得我們學習和借鑒的內容。文中如有理解和介紹的錯誤,一起學習,一起探... ...
  • Java基礎語法:註釋、數據類型、位元組 註釋 單行註釋:// 多行註釋:/* 註釋 */ 文檔註釋:/** 註釋 */ 數據類型分為兩大類:基本類型和引用類型 八大基本數據類型 整數類型 byte(占1個位元組範圍:-128~127) int(占4個位元組範圍) short(占2個位元組範圍) long( ...
  • 魔幻的2022年中中斷了寫學習筆記的工作。孩子去澳洲上學去了,再次入坑寫寫學習筆記。 孩子在大學中需要用R語言,我也跟著學習起來。 R語言主要用於學術研究中的統計、數據挖掘等數據科學,用熱門的ChatGPT得到與Python的區別的回答如下: ChatGPT回答內容 R語言和Python語言是兩種常 ...
  • 來源:eamonyin.blog.csdn.net 一、 單元測試的概念 概念: 單元測試(unit testing),是指對軟體中的最小可測試單元進行檢查和驗證。在Java中單元測試的最小單元是類。 單元測試是開發者編寫的一小段代碼,用於檢驗被測代碼的一個很小的、很明確的功能是否正確。執行單元測試 ...
  • 本文介紹基於Python語言,對神經網路模型的結構進行可視化繪圖的方法。 最近需要進行神經網路結構模型的可視化繪圖工作。查閱多種方法後,看到很多方法都比較麻煩,例如單純利用graphviz模塊,就需要手動用DOT語言進行圖片描述,比較花時間;最終,發現利用第三方的ann_visualizer模塊,可 ...
  • 這是golang拾遺系列的第六篇。這個系列主要用來記錄一些平時不常見的知識點,偶爾也會實現些有意思的小功能,比如這篇。 golang拾遺系列目錄: golang拾遺:指針和介面 golang拾遺:為什麼我們需要泛型 golang拾遺:嵌入類型 golang拾遺:內置函數len的小知識 golang拾 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...