異步編程中async Task
與async void
的返回值選擇
在異步編程中使用async
和await
很常見,但選擇public async Task AsyncMethod(int num)
還是public async void AsyncMethod(int num)
作為方法的返回類型卻常常令人困惑。
返回Task
一般情況下,返回Task
是首選。它允許調用者跟踪異步操作的進度並等待其完成。當任務表示可能需要大量時間的長時間運行操作時,這非常有用。
返回void
返回void
通常用於異步操作不需要報告其進度或調用者不需要等待其完成的情況。一個合適的場景是處理事件,因為事件處理程序通常不返回值。
非必要關鍵字
在某些情況下,async
和await
可能並非必需。例如,如果您的方法只執行單個異步操作並且不需要跟踪其進度,您可以使用以下語法:
<code class="language-csharp">public static void AsyncMethod2(int num) { Task.Factory.StartNew(() => Thread.Sleep(num)); }</code>
但是,在這種情況下仍然建議使用async
和await
,因為它們確保了異常的正確處理,尤其是在異步操作拋出調用者未處理的異常時。
其他注意事項
async void
方法被認為是“頂級”異步操作,並且在異常處理方面有特殊規則。 async
方法拋出異常,調用者並不總是能觀察到。 async
和await
確保在頂級和非頂級異步方法中都能正確處理異常。 以上是異步任務vs.異步void:何時應該返回任務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!