Innere Ausnahme in C# erneut auslösen und Stack-Trace beibehalten
In Szenarien, in denen verschachtelte Ausnahmen über Reflektion abgefangen werden, kann das erneute Auslösen der inneren Ausnahme dazu führen, dass Stack-Trace-Informationen verloren gehen. Um dieses Problem zu lösen, besteht eine wirksame Lösung darin, die in .NET 4.5 eingeführte Klasse ExceptionDispatchInfo zu verwenden.
Verwenden Sie ExceptionDispatchInfo, um Stapelspuren beizubehalten
ExceptionDispatchInfo ermöglicht das Abfangen einer Ausnahme und deren erneutes Auslösen, ohne den Stack-Trace zu ändern. Hier ist ein Beispiel:
<code class="language-csharp">using ExceptionDispatchInfo = System.Runtime.ExceptionServices.ExceptionDispatchInfo; try { // 可能抛出异常的代码 } catch (Exception ex) { ExceptionDispatchInfo.Capture(ex).Throw(); }</code>
Durch die Verwendung von ExceptionDispatchInfo können innere Ausnahmen erneut ausgelöst werden, während ihr ursprünglicher Stack-Trace erhalten bleibt. Diese Methode funktioniert mit jedem Ausnahmetyp, nicht beschränkt auf AggregateException.
Eingeführt für asynchrone Funktionalität
Die ExceptionDispatchInfo-Klasse wird hauptsächlich zur Behandlung von Ausnahmen bei asynchronen Vorgängen verwendet. Insbesondere entpackt die C#-Sprachfunktion „await“ innere Ausnahmen von AggregateException-Instanzen, was bei der asynchronen Programmierung zu Verwirrung führen kann. ExceptionDispatchInfo verwaltet in solchen Szenarien effektiv Ausnahme-Stack-Traces.
Das obige ist der detaillierte Inhalt vonWie kann ich innere Ausnahmen in C# erneut auslösen und gleichzeitig den Stack-Trace beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!