2012-06-11 14 views

Respuesta

7

Esta propiedad es siempre cierta. Solía ​​ser posible ser falso, muy atrás en los días .NET 1.x. Esa versión permite que un hilo muera en una excepción no controlada sin que termine todo el proceso. Simplemente no funcionó bien, los programadores no implementaron el controlador de eventos (o no supieron cómo manejar adecuadamente la excepción del evento, quién lo hace), así que los hilos simplemente murieron sin previo aviso. Casi imposible no tener esta causa es difícil de diagnosticar la falla del programa.

Microsoft cambió el comportamiento predeterminado en .NET 2.0, una excepción no controlada finaliza el programa. Técnicamente aún es posible anular este comportamiento, un host CLR personalizado puede mantener vivo el proceso implementando la interfaz IHostPolicyManager. Y el host predeterminado admite el elemento de configuración <legacyUnhandledExceptionPolicy>. No lo uses, de esa manera yacen los dragones.

+0

Simplemente probando, puedo ver que la misma excepción sin manos (por ejemplo: InvalidDataException) tiene IsTerminating establecido en verdadero cuando se ejecuta en la aplicación, pero se establece en falso cuando se ejecuta el mismo código en la prueba unitaria (vstest.executionengine. exe de VS2017). –

3

No, las excepciones no administradas de subprocesos administrados generados por otra aplicación tendrán IsTerminating igual a falso, ya que matará el hilo pero no la aplicación general. Esa es la única vez que he visto que IsTerminating sea falso en esta situación, y el MSDN page dice que este es el caso de uso principal también.

0

Lo usé para fines de prueba. Quería probar mi UnhandledExceptionHandler, que registra las excepciones. Así que lo configuro para que pueda registrar el mensaje pero no derribar el hilo de prueba.

Pero normalmente, esto significa que en todas las demás situaciones que he visto, el indicador IsTerminating se estableció en verdadero.

Cuestiones relacionadas