首頁 > 後端開發 > C++ > 在非同步 C# 程式碼中處理 AggregateException 時,如何防止遺失錯誤訊息?

在非同步 C# 程式碼中處理 AggregateException 時,如何防止遺失錯誤訊息?

Barbara Streisand
發布: 2025-01-12 15:51:43
原創
292 人瀏覽過

How Can I Prevent Losing Error Information When Handling AggregateExceptions in Asynchronous C# Code?

非同步 C# 和 AggregateException 的挑戰

使用 await 在 C# 處理非同步操作時,需要仔細注意管理故障任務的異常。 雖然 await 通常會重新拋出 AggregateException 中遇到的第一個異常,但遺憾的是後續異常會遺失。這種遺漏可能會導致錯誤報告不完整併阻礙調試工作。

解決方案:保留異常詳細資訊

為了有效保留 AggregateException 中包含的所有異常詳細信息,自定義擴展方法提供了一個強大的解決方案:

<code class="language-csharp">public static async Task WithAggregateExceptionHandling(this Task source)
{
    try
    {
        await source.ConfigureAwait(false);
    }
    catch (Exception ex)
    {
        // Preserve original exception context
        ExceptionDispatchInfo.Capture(source.Exception ?? new Exception("Task was cancelled or encountered an unknown error.")).Throw();
    }
}</code>
登入後複製

此擴充方法將 await 呼叫封裝在 try-catch 區塊中。 至關重要的是,它使用 ExceptionDispatchInfo.Capture 重新拋出原始異常(如果任務被取消,則拋出預設異常),確保維護完整的異常上下文(包括堆疊追蹤)。

實作範例

整合此方法非常簡單:

<code class="language-csharp">Task[] tasks = new[] { /* ... your tasks ... */ };
await Task.WhenAll(tasks).WithAggregateExceptionHandling(); // Rethrows AggregateException with full context</code>
登入後複製

透過採用這種方法,開發人員可以有效地處理非同步 C# 程式碼中的 AggregateExceptions,防止遺失有價值的錯誤資訊並促進更徹底的錯誤處理和偵錯。

以上是在非同步 C# 程式碼中處理 AggregateException 時,如何防止遺失錯誤訊息?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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