C# で内部例外を再スローしながら元のスタック トレースを維持する
C# で内部例外を再スローするときに元のスタック トレースが失われると、デバッグとトラブルシューティングが大幅に困難になります。 幸いなことに、.NET 4.5 で導入された ExceptionDispatchInfo
クラスが解決策を提供します。
解決策:
完全なスタック トレースを保存するには、次のように ExceptionDispatchInfo
を使用します。
<code class="language-csharp">try { task.Wait(); } catch (AggregateException ex) { ExceptionDispatchInfo.Capture(ex.InnerException).Throw(); }</code>
説明:
ExceptionDispatchInfo
は、スタック トレースを含む例外とその現在の状態をキャプチャし、この情報を変更せずに後で再スローできるようにします。 これは AggregateException
に限定されません。どの例外タイプでも機能します。 この機能は、非同期コードと同期コード間の相互運用性を向上させるために、await
インスタンスから内部例外をアンラップすることが多い AggregateException
キーワードで特に役立ちます。
以上がC# で InnerExceptions を再スローするときにスタック トレースを保存するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。