C# 中 Async/Await 的使用:等待還是不等待?對執行的影響
以下程式碼包含六次對 Callee
方法的調用,其執行方式各有不同:
非同步調用(Fire-and-forget): Callee
方法被非同步調用,不進行等待。方法在背景異步運行,呼叫方法立即繼續執行。
等待非同步呼叫: Callee
方法被呼叫並使用 await
等待其完成。呼叫方法會等待 Callee
方法執行完畢後再繼續執行後續程式碼。確保 Callee
方法完成後才執行其後的程式碼。
使用 Task.Run 的非同步呼叫: Callee
方法使用 Task.Run
啟動,但不等待結果。與情況 1 相同,Callee
方法在背景運行,呼叫方法立即繼續執行。
使用 Task.Run 並等待非同步呼叫: Callee
方法使用 Task.Run
啟動,並等待結果。這與情況 2 等效,呼叫方法等待 Callee
方法完成後才繼續執行。
使用 Task.Run 和 async 的非同步呼叫: 與情況 3 相同,只是 Callee
方法宣告為 async
。 async
關鍵字允許方法以非同步方式調用,即使它被 Task.Run
包裝。
使用 Task.Run 和 async 並等待非同步呼叫: 與情況 4 相同,只是 Callee
方法宣告為 async
。同樣,async
關鍵字允許等待方法,即使它被 Task.Run
包裝。
總結:這些呼叫的底層邏輯如下:
情況 1 和 3: Callee
方法在後台執行緒上執行,呼叫方法立即繼續執行。
情況 2 和 4: 呼叫方法等待 Callee
方法完成之後才執行其後的程式碼。
情況 5 和 6: 這些是使用 Task.Run
進行額外並行處理的非同步呼叫。但是,async
關鍵字允許根據需要等待它們。
以上是C# 中的非同步/等待:等待還是不等待? 對執行的影響的詳細內容。更多資訊請關注PHP中文網其他相關文章!