공용 언어 런타임을 사용하면 스레드에서 처리되지 않은 대부분의 예외를 자연스럽게 진행할 수 있습니다. 대부분의 경우 이는 처리되지 않은 예외로 인해 애플리케이션이 종료됨을 의미합니다. 그러나 공용 언어 런타임은 프로그램 흐름을 제어하는 데 사용되는 처리되지 않은 특정 예외에 대한 백스톱을 제공합니다.
ThreadAbortException가 호출되어 A Abort가 스레드에서 발생합니다. 이는 .NET Framework 앱에만 적용됩니다.
AppDomainUnloadedException 스레드가 실행 중인 애플리케이션 도메인이 언로드되고 있기 때문에 스레드에서 throw됩니다.
공용 언어 런타임 또는 호스트 프로세스는 내부 예외를 throw하여 스레드를 종료합니다.
공용 언어 런타임에서 만든 스레드에서 이러한 예외가 처리되지 않은 경우 예외는 스레드를 종료하지만 공용 언어 런타임에서는 예외를 더 이상 진행할 수 없습니다.
이러한 예외가 주 스레드 또는 관리되지 않는 코드에서 런타임을 입력한 스레드에서 처리되지 않은 경우 정상적으로 진행되어 애플리케이션이 종료됩니다.
비고
런타임에서는 관리 코드에서 예외 처리기를 설치할 기회가 생기기 전에 처리되지 않은 예외를 발생시킬 수 있습니다. 관리 코드에서 이러한 예외를 처리할 기회가 없더라도 예외를 자연스럽게 진행할 수 있습니다.
개발 중 스레딩 문제 발견
스레드가 자동으로 실패하도록 허용되면 애플리케이션을 종료하지 않고 심각한 프로그래밍 문제가 감지되지 않을 수 있습니다. 이는 오랜 기간 동안 실행되는 서비스 및 기타 애플리케이션에 대한 특정 문제입니다. 스레드가 실패하면 프로그램 상태가 점차 손상됩니다. 애플리케이션 성능이 저하되거나 애플리케이션이 응답하지 않을 수 있습니다.
운영 체제가 프로그램을 종료할 때까지 스레드에서 처리되지 않은 예외가 자연스럽게 진행되도록 허용하면 개발 및 테스트 중에 이러한 문제가 노출됩니다. 프로그램 종료에 대한 오류 보고서는 디버깅을 지원합니다.
호스트 재정의
관리되지 않는 호스트는 호스팅 API에서 ICLRPolicyManager 인터페이스를 사용하여 공용 언어 런타임의 처리되지 않은 기본 예외 정책을 재정의할 수 있습니다. ICLRPolicyManager::SetUnhandledExceptionPolicy 함수는 처리되지 않은 예외에 대한 정책을 설정하는 데 사용됩니다.
참고하십시오
.NET