首页 >后端开发 >C++ >如何在保留堆栈跟踪的同时重新抛出 C# 中的内部异常?

如何在保留堆栈跟踪的同时重新抛出 C# 中的内部异常?

Barbara Streisand
Barbara Streisand原创
2025-01-17 07:21:10989浏览

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

在C#中重新抛出内部异常并保留堆栈跟踪

在通过反射捕获嵌套异常的场景中,重新抛出内部异常可能会导致堆栈跟踪信息丢失。为了克服这个问题,一个有效的解决方案是利用.NET 4.5中引入的ExceptionDispatchInfo类。

使用ExceptionDispatchInfo保留堆栈跟踪

ExceptionDispatchInfo允许捕获异常并重新抛出它,而不会修改堆栈跟踪。以下是一个示例:

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

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

通过使用ExceptionDispatchInfo,可以重新抛出内部异常,同时保留其原始堆栈跟踪。此方法适用于任何异常类型,而不限于AggregateException。

为异步功能而引入

ExceptionDispatchInfo类主要用于解决异步操作中异常情况的处理。特别是,await C#语言特性会从AggregateException实例中展开内部异常,这可能会导致异步编程中的混淆。ExceptionDispatchInfo有效地在此类场景中维护异常堆栈跟踪。

以上是如何在保留堆栈跟踪的同时重新抛出 C# 中的内部异常?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn