Maison >développement back-end >C++ >Comment puis-je conserver les traces de pile lors de la relance d'InnerExceptions en C# ?

Comment puis-je conserver les traces de pile lors de la relance d'InnerExceptions en C# ?

DDD
DDDoriginal
2025-01-17 07:17:09883parcourir

How Can I Preserve Stack Traces When Rethrowing InnerExceptions in C#?

Conserver les traces de la pile d'origine tout en relançant les exceptions internes en C#

Le débogage et le dépannage deviennent beaucoup plus difficiles lorsque la trace de la pile d'origine est perdue lors de la nouvelle exécution d'une exception interne en C#. Heureusement, la classe ExceptionDispatchInfo, introduite dans .NET 4.5, apporte une solution.

La solution :

Pour conserver la trace complète de la pile, utilisez ExceptionDispatchInfo comme ceci :

<code class="language-csharp">try
{
    task.Wait();
}
catch (AggregateException ex)
{
    ExceptionDispatchInfo.Capture(ex.InnerException).Throw();
}</code>

Explication :

ExceptionDispatchInfo capture l'exception et son état actuel, y compris la trace de la pile, vous permettant de la relancer plus tard sans modifier ces informations. Cela ne se limite pas à AggregateException ; cela fonctionne avec n'importe quel type d'exception. Cette fonctionnalité est particulièrement utile avec le mot-clé await, qui déballe souvent les exceptions internes des instances AggregateException pour une interopérabilité améliorée entre le code asynchrone et synchrone.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn