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 클래스는 주로 비동기 작업에서 예외를 처리하는 데 사용됩니다. 특히 C# 대기 기능은 AggregateException 인스턴스에서 내부 예외를 래핑 해제하여 비동기 프로그래밍에 혼란을 초래할 수 있습니다. ExceptionDispatchInfo는 이러한 시나리오에서 예외 스택 추적을 효과적으로 유지 관리합니다.
위 내용은 스택 추적을 유지하면서 C#에서 내부 예외를 어떻게 다시 발생시킬 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!