기본 예외를 호출자에게 전달하기 위해 InnerException을 다시 발생시키는 것이 일반적인 관행이지만, 이로 인해 중요한 스택 추적 정보가 실수로 삭제되어 디버깅 작업이 방해를 받을 수 있습니다.
C#에서는 리플렉션을 통해 메서드가 호출되고 예외가 발생하면 실제 예외 주위에 래퍼로 TargetInvocationException이 발생합니다. 내부 예외를 검색하기 위해 개발자는 종종 해당 예외를 다시 발생시킵니다. 그러나 이 작업을 수행하면 오류의 실제 원인을 가리키는 스택 추적 정보가 지워집니다.
.NET 4.5부터는 ExceptionDispatchInfo 클래스가 이 문제에 대한 솔루션을 제공합니다. 스택 추적을 유지하면서 예외를 포착하고 다시 발생시킬 수 있습니다. 사용 방법은 다음과 같습니다.
<code class="language-csharp">using ExceptionDispatchInfo = System.Runtime.ExceptionServices.ExceptionDispatchInfo; try { // 执行可能抛出异常的方法。 task.Wait(); } catch (AggregateException ex) { // 捕获内部异常并使用原始堆栈跟踪重新抛出它。 ExceptionDispatchInfo.Capture(ex.InnerException).Throw(); }</code>
이 메서드는 C# 언어 기능을 사용한 후 AggregateException 인스턴스에서 내부 예외를 래핑 해제할 때 특히 유용합니다. 비동기 프로그래밍 중에 스택 추적 정보가 손실되지 않도록 보장합니다.
위 내용은 C#에서 예외를 다시 발생시킬 때 스택 추적을 어떻게 보존할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!