在 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# 中重新抛出 InnerException 时如何保留堆栈跟踪?的详细内容。更多信息请关注PHP中文网其他相关文章!