Исключения в управляемых потоках

Среда CLR позволяет большинству необработанных исключений выполняться в потоках. В большинстве случаев это означает, что необработанное исключение приводит к прекращению работы приложения. Однако среда CLR предоставляет backstop для некоторых необработанных исключений, которые используются для управления потоком программы:

  • В потоке создается исключение ThreadAbortException из-за вызова Abort. Это относится только к приложениям платформа .NET Framework.

  • В потоке создается исключение AppDomainUnloadedException из-за того, что в данный момент выгружается домен приложения, в котором выполняется поток.

  • Среда CLR или ведущий процесс прерывает выполнение потока путем создания внутреннего исключения.

Если любые из этих исключений не обрабатываются в потоках, созданных в среде CLR, исключение завершает поток, однако среда CLR не позволяет исключению выполнять какие-либо дополнительные действия.

Если эти исключения не обрабатываются в главном потоке или в потоках, которые перешли в среду выполнения из неуправляемого кода, они продолжают выполнение, что приводит к завершению работы приложения.

Примечание.

Среда выполнения может вызвать необработанное исключение, прежде чем любой управляемый код имел возможность установить обработчик исключений. Даже если управляемый код не в состоянии обработать такое исключение, исключение может продолжать выполняться.

Предоставление проблем с потоком во время разработки

Если потоки могут завершаться сбоем без уведомления и без завершения работы приложения, при программировании могут оставаться незамеченными серьезные ошибки. Это создает серьезную проблему для служб и других приложений, которые выполняются продолжительное время. В случае сбоя потоков состояние программы постепенно нарушается. Производительность приложения может ухудшаться, или приложение может перестать отвечать на запросы.

Предоставление возможности необработанным исключениям продолжать выполняться в потоках, пока операционная система не завершит программу, создает проблемы во время разработки и тестирования. Отчеты об ошибках при завершении программы поддерживают процесс отладки.

Переопределение узла

Неуправляемый узел может использовать интерфейс ICLRPolicyManager в API размещения для переопределения политики необработанных исключений по умолчанию среды CLR. Чтобы задать политику для необработанных исключений, используется функция ICLRPolicyManager::SetUnhandledExceptionPolicy.

См. также