在C# 中進行非同步程式設計時,開發人員經常會遇到是否要在另一個方法中等待非同步方法呼叫的問題非同步方法或簡單地傳回任務。雖然這兩種方法似乎都有效,但每個選項都有不同的後果,值得考慮。
選項 A:直接傳回任務
在這個方法中,非同步方法直接傳回從巢狀非同步呼叫所獲取的任務。這類似於編寫:
Task FooAsync() { return BazAsync(); // Option A }
結果:
選項 B:等待任務
等待任務時,非同步方法明確等待巢狀非同步呼叫完成。寫成:
async Task BarAsync() { await BazAsync(); // Option B }
結果:
選擇正確的選項
返回或等待之間的選擇取決於根據特定場景和要求。
如果該方法執行少量同步工作並且只呼叫一個非同步方法,返回任務(選項 A)可能是一種更有效的方法。但是,如果該方法需要執行額外的非同步工作或非同步處理異常,那麼等待任務(選項 B)是合適的選擇。
要注意的是,宣告為非同步的方法不能直接回傳任務。如果方法必須傳回任務,則它本身必須聲明為非同步。
實際範例
考慮以下程式碼片段:
// Version 1: Task BarAsync() { // No need to gronkle yet... return BazAsync(); } // Oops, for version 2 I need to do some more work... async Task BarAsync() { int gronkle = await GronkleAsync(); // Do something with gronkle // Now we have to await BazAsync as we're now in an async method await BazAsync(); }
最初,BarAsync 方法不需要等待 BazAsync,因此它直接回傳任務。然而,當引入額外的非同步工作時,BarAsync 必須轉換為非同步方法並等待 BazAsync。
透過了解非同步方法中返回或等待的後果,開發人員可以有效地實現非同步程式碼並避免潛在的陷阱.
以上是我應該在非同步 C# 方法中等待或返回任務嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!