Excepciones en subprocesos administrados

Common Language Runtime permite que la mayoría de las excepciones no controladas en subprocesos continúen naturalmente. En la mayoría de los casos, esto implica que la excepción no controlada provoque la finalización de la aplicación. Sin embargo, Common Language Runtime ofrece un mecanismo de seguridad para determinadas excepciones no controladas que se usan para controlar el flujo del programa:

  • Se genera ThreadAbortException en un subproceso, porque se llamó a Abort. Solo se aplica a las aplicaciones .NET Framework.

  • Se inicia AppDomainUnloadedException en un subproceso porque el dominio de aplicación donde se ejecuta el subproceso se está descargando.

  • Common Language Runtime o un proceso de host finalizan el subproceso iniciando una excepción interna.

Si alguna de estas excepciones no se controla en subprocesos que Common Language Runtime crea, la excepción finaliza el subproceso, pero Common Language Runtime no permite la excepción continúe.

Si no se controlan en el subproceso principal o en subprocesos que especifiquen el runtime desde código no administrado, estas excepciones continúan normalmente, lo que se traduce en la finalización de la aplicación.

Nota

Es posible que el runtime inicie una excepción no controlada antes de que un código administrado haya tenido ocasión de instalar un controlador de excepciones. Aunque el código administrado no tuviera ninguna oportunidad de controlar la excepción, esta puede continuar normalmente.

Exposición de problemas de subprocesamiento durante el desarrollo

Cuando se permite que los subprocesos se interrumpan silenciosamente, sin finalizar la aplicación, graves problemas de programación pueden pasar inadvertidos. Se trata de un problema concreto de los servicios y otras aplicaciones que se ejecutan durante períodos prolongados. A medida que los subprocesos dejan de ejecutarse, el estado del programa se daña gradualmente. Puede que el rendimiento de la aplicación se degrade o que la aplicación deje de responder.

Si se permite que las excepciones no controladas en subprocesos continúen naturalmente hasta que el sistema operativo finalice el programa, estos problemas se exponen durante el desarrollo y pruebas. Los informes de errores en la finalización de programas admiten la depuración.

Invalidación de host

Un host no administrado puede usar la interfaz ICLRPolicyManager de Hosting API para invalidar la directiva de excepciones no controladas predeterminada de Common Language Runtime. Se usa la función ICLRPolicyManager::SetUnhandledExceptionPolicy para establecer la directiva de excepciones no controladas.

Vea también