관리형 스레드의 예외

공용 언어 런타임을 통해 스레드에 있는 대부분의 처리되지 않은 예외가 정상적으로 진행됩니다. 즉, 대부분의 경우에서 처리되지 않은 예외는 애플리케이션을 종료시킵니다. 그러나 공용 언어 런타임은 프로그램 흐름을 제어하는 데 사용되는 처리되지 않은 예외에 백업을 제공합니다.

  • Abort가 호출되었으므로 스레드에서 ThreadAbortException이 throw됩니다. 이는 .NET Framework 앱에만 적용됩니다.

  • 스레드가 실행 중인 애플리케이션 도메인이 언로드되는 중이므로 스레드에서 AppDomainUnloadedException이 throw됩니다.

  • 공용 언어 런타임 또는 호스트 프로세스에서 내부 예외를 throw하여 스레드를 종료합니다.

이러한 예외가 공용 언어 런타임에서 만든 스레드에서 처리되지 않는 경우 해당 예외는 스레드를 종료시키지만, 공용 언어 런타임에서 해당 예외가 계속 진행되도록 허용하지 않습니다.

이러한 예외가 주 스레드나 비관리 코드에서 런타임으로 들어간 스레드에서 처리되지 않는 경우 해당 예외는 정상적으로 진행되고 애플리케이션이 종료됩니다.

참고 항목

관리 코드가 예외 처리기를 설치하기 전에 런타임은 처리되지 않은 예외를 throw할 수 있습니다. 관리 코드가 이러한 예외를 처리하지 못하더라도 예외는 정상적으로 진행될 수 있습니다.

개발 중 스레딩 문제 노출

애플리케이션이 종료되지 않고 스레드에 오류가 발생할 수 있는 경우 심각한 프로그래밍 문제를 발견하지 못할 수 있습니다. 이것은 확장된 기간 동안 실행되는 서비스와 기타 애플리케이션에 특정된 문제입니다. 스레드에 오류가 발생하면 프로그램 상태가 서서히 손상됩니다. 애플리케이션 성능이 저하되거나 애플리케이션이 응답하지 않을 수 있습니다.

운영 체제가 응용 프로그램을 종료시킬 때까지 스레드의 처리되지 않은 예외가 정상적으로 진행되도록 허용하면 개발이나 테스트하는 동안 이러한 문제에 노출됩니다. 프로그램 종료에 대한 오류 보고서는 디버깅을 지원합니다.

호스트 재정의

관리되지 않는 호스트가 호스팅 API의 ICLRPolicyManager 인터페이스를 사용하여 공용 언어 런타임의 기본 처리되지 않은 예외 정책을 재정의할 수 있습니다. ICLRPolicyManager::SetUnhandledExceptionPolicy 함수를 사용하여 처리되지 않은 예외에 대한 정책을 설정합니다.

참고 항목