Maison >développement back-end >C++ >Comment puis-je relancer les exceptions internes en C# tout en préservant la trace de la pile ?

Comment puis-je relancer les exceptions internes en C# tout en préservant la trace de la pile ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-17 07:21:10989parcourir

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

Relancez l'exception interne en C# et préservez la trace de la pile

Dans les scénarios où les exceptions imbriquées sont interceptées via la réflexion, la nouvelle émission de l'exception interne peut entraîner la perte des informations de trace de la pile. Pour surmonter ce problème, une solution efficace consiste à utiliser la classe ExceptionDispatchInfo introduite dans .NET 4.5.

Utilisez ExceptionDispatchInfo pour conserver les traces de pile

ExceptionDispatchInfo permet d'intercepter une exception et de la relancer sans modifier la trace de la pile. Voici un exemple :

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

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

En utilisant ExceptionDispatchInfo, les exceptions internes peuvent être renvoyées tout en conservant leur trace de pile d'origine. Cette méthode fonctionne avec n'importe quel type d'exception, sans se limiter à AggregateException.

Introduit pour la fonctionnalité asynchrone

La classe ExceptionDispatchInfo est principalement utilisée pour gérer les exceptions dans les opérations asynchrones. En particulier, la fonctionnalité du langage wait C# déballe les exceptions internes des instances AggregateException, ce qui peut prêter à confusion dans la programmation asynchrone. ExceptionDispatchInfo conserve efficacement les traces de la pile d'exceptions dans de tels scénarios.

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