Исключения в управляемых потоках
Среда CLR позволяет большинству необработанных исключений выполняться в потоках. В большинстве случаев это означает, что необработанное исключение приводит к прекращению работы приложения. Однако среда CLR предоставляет backstop для некоторых необработанных исключений, которые используются для управления потоком программы:
В потоке создается исключение ThreadAbortException из-за вызова Abort. Это относится только к приложениям платформа .NET Framework.
В потоке создается исключение AppDomainUnloadedException из-за того, что в данный момент выгружается домен приложения, в котором выполняется поток.
Среда CLR или ведущий процесс прерывает выполнение потока путем создания внутреннего исключения.
Если любые из этих исключений не обрабатываются в потоках, созданных в среде CLR, исключение завершает поток, однако среда CLR не позволяет исключению выполнять какие-либо дополнительные действия.
Если эти исключения не обрабатываются в главном потоке или в потоках, которые перешли в среду выполнения из неуправляемого кода, они продолжают выполнение, что приводит к завершению работы приложения.
Примечание.
Среда выполнения может вызвать необработанное исключение, прежде чем любой управляемый код имел возможность установить обработчик исключений. Даже если управляемый код не в состоянии обработать такое исключение, исключение может продолжать выполняться.
Предоставление проблем с потоком во время разработки
Если потоки могут завершаться сбоем без уведомления и без завершения работы приложения, при программировании могут оставаться незамеченными серьезные ошибки. Это создает серьезную проблему для служб и других приложений, которые выполняются продолжительное время. В случае сбоя потоков состояние программы постепенно нарушается. Производительность приложения может ухудшаться, или приложение может перестать отвечать на запросы.
Предоставление возможности необработанным исключениям продолжать выполняться в потоках, пока операционная система не завершит программу, создает проблемы во время разработки и тестирования. Отчеты об ошибках при завершении программы поддерживают процесс отладки.
Переопределение узла
Неуправляемый узел может использовать интерфейс ICLRPolicyManager в API размещения для переопределения политики необработанных исключений по умолчанию среды CLR. Чтобы задать политику для необработанных исключений, используется функция ICLRPolicyManager::SetUnhandledExceptionPolicy.