>백엔드 개발 >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 클래스는 주로 비동기 작업에서 예외를 처리하는 데 사용됩니다. 특히 C# 대기 기능은 AggregateException 인스턴스에서 내부 예외를 래핑 해제하여 비동기 프로그래밍에 혼란을 초래할 수 있습니다. ExceptionDispatchInfo는 이러한 시나리오에서 예외 스택 추적을 효과적으로 유지 관리합니다.

위 내용은 스택 추적을 유지하면서 C#에서 내부 예외를 어떻게 다시 발생시킬 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.