首頁 >後端開發 >C++ >C# 中的非同步/等待:等待還是不等待? 對執行的影響

C# 中的非同步/等待:等待還是不等待? 對執行的影響

Susan Sarandon
Susan Sarandon原創
2025-01-12 13:22:43906瀏覽

Async/Await in C#:  To Await or Not to Await?  The Impact on Execution

C# 中 Async/Await 的使用:等待還是不等待?對執行的影響

以下程式碼包含六次對 Callee 方法的調用,其執行方式各有不同:

  1. 非同步調用(Fire-and-forget): Callee 方法被非同步調用,不進行等待。方法在背景異步運行,呼叫方法立即繼續執行。

  2. 等待非同步呼叫: Callee 方法被呼叫並使用 await 等待其完成。呼叫方法會等待 Callee 方法執行完畢後再繼續執行後續程式碼。確保 Callee 方法完成後才執行其後的程式碼。

  3. 使用 Task.Run 的非同步呼叫: Callee 方法使用 Task.Run 啟動,但不等待結果。與情況 1 相同,Callee 方法在背景運行,呼叫方法立即繼續執行。

  4. 使用 Task.Run 並等待非同步呼叫: Callee 方法使用 Task.Run 啟動,並等待結果。這與情況 2 等效,呼叫方法等待 Callee 方法完成後才繼續執行。

  5. 使用 Task.Run 和 async 的非同步呼叫: 與情況 3 相同,只是 Callee 方法宣告為 asyncasync 關鍵字允許方法以非同步方式調用,即使它被 Task.Run 包裝。

  6. 使用 Task.Run 和 async 並等待非同步呼叫: 與情況 4 相同,只是 Callee 方法宣告為 async。同樣,async 關鍵字允許等待方法,即使它被 Task.Run 包裝。

總結:這些呼叫的底層邏輯如下:

  • 情況 1 和 3: Callee 方法在後台執行緒上執行,呼叫方法立即繼續執行。

  • 情況 2 和 4: 呼叫方法等待 Callee 方法完成之後才執行其後的程式碼。

  • 情況 5 和 6: 這些是使用 Task.Run 進行額外並行處理的非同步呼叫。但是,async 關鍵字允許根據需要等待它們。

以上是C# 中的非同步/等待:等待還是不等待? 對執行的影響的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn