首頁 > 後端開發 > C++ > 如何在保留堆疊追蹤的同時重新拋出 C# 中的內部異常?

如何在保留堆疊追蹤的同時重新拋出 C# 中的內部異常?

Barbara Streisand
發布: 2025-01-17 07:21:10
原創
987 人瀏覽過

How Can I Rethrow Inner Exceptions in C# While Preserving the Stack Trace?

在C#中重新拋出內部異常並保留堆疊追蹤

在透過反射捕捉巢狀異常的場景中,重新拋出內部異常可能會導致堆疊追蹤資訊遺失。為了克服這個問題,一個有效的解決方案是利用.NET 4.5中引入的ExceptionDispatchInfo類別。

使用ExceptionDispatchInfo保留堆疊追蹤

ExceptionDispatchInfo允許捕獲異常並重新拋出它,而不會修改堆疊追蹤。以下是一個範例:

<code class="language-csharp">using ExceptionDispatchInfo = 
    System.Runtime.ExceptionServices.ExceptionDispatchInfo;

try
{
    // 可能抛出异常的代码
}
catch (Exception ex)
{
    ExceptionDispatchInfo.Capture(ex).Throw();
}</code>
登入後複製

透過使用ExceptionDispatchInfo,可以重新拋出內部異常,同時保留其原始堆疊追蹤。此方法適用於任何異常類型,而不限於AggregateException。

為非同步功能而引入

ExceptionDispatchInfo類別主要用於解決非同步操作中異常情況的處理。特別是,await C#語言特性會從AggregateException實例中展開內部異常,這可能會導致非同步程式設計中的混淆。 ExceptionDispatchInfo有效地在此類情境中維護異常堆疊追蹤。

以上是如何在保留堆疊追蹤的同時重新拋出 C# 中的內部異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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