Heim >Backend-Entwicklung >C++ >Wie kann ich Stack-Traces beim erneuten Auslösen von InnerExceptions in C# beibehalten?
Beibehalten der ursprünglichen Stapelspuren beim erneuten Auslösen innerer Ausnahmen in C#
Debugging und Fehlerbehebung werden erheblich schwieriger, wenn der ursprüngliche Stack-Trace beim erneuten Auslösen einer inneren Ausnahme in C# verloren geht. Glücklicherweise bietet die in .NET 4.5 eingeführte Klasse ExceptionDispatchInfo
eine Lösung.
Die Lösung:
Um den vollständigen Stack-Trace beizubehalten, verwenden Sie ExceptionDispatchInfo
wie folgt:
<code class="language-csharp">try { task.Wait(); } catch (AggregateException ex) { ExceptionDispatchInfo.Capture(ex.InnerException).Throw(); }</code>
Erklärung:
ExceptionDispatchInfo
erfasst die Ausnahme und ihren aktuellen Status, einschließlich der Stapelüberwachung, sodass Sie sie später erneut auslösen können, ohne diese Informationen zu ändern. Dies ist nicht auf AggregateException
beschränkt; es funktioniert mit jedem Ausnahmetyp. Diese Funktion ist besonders nützlich mit dem Schlüsselwort await
, das häufig innere Ausnahmen von AggregateException
-Instanzen auspackt, um die Interoperabilität zwischen asynchronem und synchronem Code zu verbessern.
Das obige ist der detaillierte Inhalt vonWie kann ich Stack-Traces beim erneuten Auslösen von InnerExceptions in C# beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!