保證異常傳播的即發即忘
在「即發即棄」方法中,呼叫方法時無需等待其完成或處理其結果。然而,當一個方法傳回一個任務時,它並不是真正的「即發即忘」。任務中拋出的異常不會傳播到呼叫上下文。
為了確保「Fire and Forget」方法中的異常得到處理或升級,建議修改擴展方法如下:
public static async void Forget(this Task task) { await task; }
透過等待任務,任務中拋出的任何異常都將傳播到呼叫上下文並進行處理或升級
處理「Fire and Forget」方法中的預期異常
最初的問題引起了對可能在「Fire and Forget」方法中拋出預期和可忽略異常的方法的擔憂。忘記」的上下文。為了解決這個問題,可以修改擴展方法以接受可接受的異常類型列表:
public static async void Forget(this Task task, params Type[] acceptableExceptions) { try { await task.ConfigureAwait(false); } catch (Exception ex) { // TODO: consider whether derived types are also acceptable. if (!acceptableExceptions.Contains(ex.GetType())) throw; } }
這允許呼叫者指定應忽略哪些異常類型以及應升級哪些異常類型,從而提供對「Fire and Forget」方法中的異常處理行為。
以上是如何處理「即發即忘」非同步方法中的異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!