為什麼Async Void 不是一個好主意:分解原因
雖然從非同步方法返回void 在某些情況下可能看起來無害在這種情況下,行業最佳實踐強烈反對這種做法。原因如下:
1。異常處理異常
Async void 方法具有獨特的錯誤處理語意。從 async void 方法中逃逸的異常(例如提供的範例中的「PrimeCustomTask」)變得難以捕獲和處理。這使錯誤處理變得複雜,並使偵錯更具挑戰性。
2.組合挑戰
非同步 void 方法缺乏與其他非同步操作良好組合的能力。 「PrimeCustomTask」中的程式碼是孤立存在的,無法輕鬆整合到更高層級的非同步建構中。這限制了程式碼的可維護性和程式碼的重用。
3.測試困難
單元測試 async void 方法是出了名的困難。由於該方法返回 void,因此創建可靠的斷言並測試所有可能的執行路徑具有挑戰性。這樣就很難保證程式碼的正確性。
4.異常傳播
如答案所述,從「PrimeCustomTask」轉義的異常不會自然傳播到其調用者。這可能會導致意外行為,並導致難以有效處理錯誤。
修改以遵循約定
要與既定約定保持一致,您可以修改使用非同步任務方法的範例:
protected override async Task OnLoad(EventArgs e) { if (CustomTask == null) await PrimeCustomTask(); } private async Task PrimeCustomTask() ...
透過返回非同步任務,您將受益來自:
透過採用這些最佳實踐,您將編寫出更易於維護的程式碼,使用非同步方法時可測試且可靠的程式碼。
以上是為什麼應該避免 C# 中的 Async Void 方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!