Heim > Backend-Entwicklung > C++ > Wie kann ich innere Ausnahmen in C# erneut auslösen und gleichzeitig den Stack-Trace beibehalten?

Wie kann ich innere Ausnahmen in C# erneut auslösen und gleichzeitig den Stack-Trace beibehalten?

Barbara Streisand
Freigeben: 2025-01-17 07:21:10
Original
987 Leute haben es durchsucht

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

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage