Compartir a través de


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 significa que la excepción no controlada hace que la aplicación finalice. Sin embargo, Common Language Runtime proporciona un backstop 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. Esto solo se aplica a las aplicaciones de .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 creados por Common Language Runtime, la excepción finaliza el subproceso, pero Common Language Runtime no permite que la excepción continúe.

Si estas excepciones no están controladas en el subproceso principal o en subprocesos que entraron en tiempo de ejecución desde código no administrado, continúan normalmente, lo que da lugar a la finalización de la aplicación.

Nota:

Es posible que el tiempo de ejecución inicie una excepción no controlada antes de que cualquier código administrado haya tenido la oportunidad de instalar un controlador de excepciones. Aunque el código administrado no tenía la oportunidad de controlar dicha excepción, la excepción puede continuar de forma natural.

Exposición de problemas de subprocesamiento durante el desarrollo

Cuando se permite que los subprocesos produzcan errores en modo silencioso, sin terminar la aplicación, los problemas de programación graves pueden no detectarse. Se trata de un problema concreto para 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. El rendimiento de la aplicación puede degradarse o es posible que la aplicación deje de responder.

Permitir que las excepciones no controladas en los subprocesos continúen de forma natural, hasta que el sistema operativo finaliza el programa, expone estos problemas durante el desarrollo y las 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 en la API de hospedaje para invalidar la directiva de excepción no controlada predeterminada de Common Language Runtime. La función ICLRPolicyManager::SetUnhandledExceptionPolicy se usa para establecer la directiva para excepciones no controladas.

Consulte también