定義 :
- 同步: 必須從頭到尾等待直到完成為止。
- 如果你是個同步的家庭主婦,洗衣服時,你必須等到衣服洗完才能繼續做其他事,不能去打電動看youtube。
- 非同步 : 一個任務可以處於尚未完成的狀態,之後再接續下去繼續完成
- 如果你是個非同步的家庭主婦,你可以啟動洗衣機之後,先去做其他事,之後等到洗衣機脫水完逼逼叫,再接續下去處理其他任務。
- 單執行緒
- 從頭到尾只有一個 thread 可以執行程式
- 多執行緒
- 有兩個以上的 thread 能夠執行程式
Task (任務): 非同步的抽象
讓我們可以表達一件事情是否做到一半、是否完成、接下來要繼續做什麼。
只要宣告為 Task ,就是啟動非同步作業了
async : 實作細節
當你將一個方法使用 async 進行修飾,這意味著你告訴 Compiler
- 我要在這個方法內進行一個非同步的任務
- 而且我需要在這個方法內等待某個非同步任務完成後,繼續進行之後的任務
如果今天沒有 async 關鍵字,你就必須要自己把任務做成一個一個的 Callback,並且把這些任務放到Task裡,然後不停的寫 ContinueWith。
有 async 必然有 await 相伴
有了 await,Compiler 才知道非同步的斷點在哪裡,才有辦法幫你生成狀態機。
如果你完全不需要寫await,Compiler 也不需要幫你生成狀態機,你的程式只要順順執行下去,那寫 async 幾乎是不必要的。
Thread-safe
資料來源: