首頁 > 後端開發 > C++ > 如何處理「即發即忘」非同步方法中的異常?

如何處理「即發即忘」非同步方法中的異常?

DDD
發布: 2024-12-29 05:34:14
原創
788 人瀏覽過

How Can I Handle Exceptions in a

保證異常傳播的即發即忘

在「即發即棄」方法中,呼叫方法時無需等待其完成或處理其結果。然而,當一個方法傳回一個任務時,它並不是真正的「即發即忘」。任務中拋出的異常不會傳播到呼叫上下文。

為了確保「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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板