▪️.Net - 同步與非同步
2023-7-13
| 2025-3-19
字數 505閱讀時間 2 分鐘

定義 :


  • 同步: 必須從頭到尾等待直到完成為止。
    • 如果你是個同步的家庭主婦,洗衣服時,你必須等到衣服洗完才能繼續做其他事,不能去打電動看youtube。
  • 非同步 : 一個任務可以處於尚未完成的狀態,之後再接續下去繼續完成
    • 如果你是個非同步的家庭主婦,你可以啟動洗衣機之後,先去做其他事,之後等到洗衣機脫水完逼逼叫,再接續下去處理其他任務。
  • 單執行緒
    • 從頭到尾只有一個 thread 可以執行程式
  • 多執行緒
    • 有兩個以上的 thread 能夠執行程式

Task (任務): 非同步的抽象


讓我們可以表達一件事情是否做到一半、是否完成、接下來要繼續做什麼。
只要宣告為 Task ,就是啟動非同步作業了

async : 實作細節


當你將一個方法使用 async 進行修飾,這意味著你告訴 Compiler
  • 我要在這個方法內進行一個非同步的任務
  • 而且我需要在這個方法內等待某個非同步任務完成後,繼續進行之後的任務
如果今天沒有 async 關鍵字,你就必須要自己把任務做成一個一個的 Callback,並且把這些任務放到Task裡,然後不停的寫 ContinueWith。

有 async 必然有 await 相伴

有了 await,Compiler 才知道非同步的斷點在哪裡,才有辦法幫你生成狀態機。
如果你完全不需要寫await,Compiler 也不需要幫你生成狀態機,你的程式只要順順執行下去,那寫 async 幾乎是不必要的。

Thread-safe


資料來源:
 
  • Dotnet
  • @NgModulecode first
    Loading...