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!