Pregunta

Al abortar la ejecución de un hilo, siempre estoy dudando entre una salida elegante con un controlador de eventos como este:

int result = WaitHandle.WaitAny(handles);
if (result = WAIT_FINALIZE)
  FinalizeAndExit();

y usar el evento para señalar el hilo que debe terminar

o simplemente manejar la excepción ThreadAbortException para finalizar el hilo ...

try
{
  // Main execution
}
catch(ThreadAbortException e)
{
  // FinalizeAndExit();
}
finally
{
}

Por lo general, me inclino a usar el enfoque ThreadAbortException ya que puede manejarse, pero se vuelve a levantar al final del bloque catch, y también evita que el hilo se mantenga vivo por "traicionero". métodos, pero he visto ambos enfoques.

¿Cuál es tu opinión? ¿Hay alguna situación en la que sea mejor usar una sobre otra o es mejor usar siempre el enfoque x?

¿Fue útil?

Solución

En general, el primer método es preferible.

Es difícil (si no imposible) escribir código que siempre manejará una ThreadAbortException con gracia. La excepción puede ocurrir en medio de lo que sea que esté haciendo el hilo, por lo que algunas situaciones pueden ser difíciles de manejar.

Por ejemplo, la excepción puede ocurrir después de haber creado un objeto FileStream, pero antes de que la referencia se asigne a una variable. Eso significa que tiene un objeto que debe eliminarse, pero la única referencia a él se pierde en la pila en algún lugar ...

Otros consejos

Si puedo tratar de evitar el uso de Thread.Abort. El problema con Thread.Abort es que podría suceder en (casi) cualquier línea del código de ejecución y podría causar algunos '' interesantes '' comportamiento (leer: errores). Prefiero preferir tener un punto de salida en mi código que verifique si hay un evento o variable para ver si el hilo debe dejar de ejecutarse y salir con gracia.

Seguramente si se espera el evento de terminación, entonces no es una excepción (por la definición estricta del término), por lo tanto, debería usar el primer método. Una salida elegante también muestra que usted tiene el control.

Si bien las excepciones son útiles y, en algunos casos, necesarias, se pueden usar en exceso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top