ホームページ >バックエンド開発 >C++ >C# で InnerExceptions を再スローするときにスタック トレースを保存するにはどうすればよいですか?

C# で InnerExceptions を再スローするときにスタック トレースを保存するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-17 07:17:09811ブラウズ

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

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。