¿Cómo terminar un hilo en C #?

Quise probar mi suerte para enhebrar con C #, sé algunas cosas sobre cómo enhebrar en C.

Así que solo quería preguntar si quería terminar un hilo, debería hacerlo con smt.Abort() o se “matará” después de que la función termine?

Además, ¿hay algo así como pthread_exit() en C en C #?

Lo siento por mi ingles. 🙂

Thread.Abort “matará” el hilo, pero esto es más o menos equivalente a:

Escenario: quieres apagar tu computadora

Solución: amarras dinamita a tu computadora, la enciendes y corres.

Es MUCHO mejor desencadenar una “condición de salida”, ya sea a través de CancellationTokenSource.Cancel , configurando algunos (acceso seguro) “está ejecutando” bool, etc., y llamando a Thread.Join . Esto es más como:

Escenario: quieres apagar tu computadora

Solución: hace clic en Inicio, Apagado y espera hasta que la computadora se apague.

Terminar un hilo externamente (desde fuera del hilo) es una mala idea; nunca se sabe qué estaba pasando el hilo cuando lo mata de forma asíncrona. En C #, si la función de hilo retorna, el hilo termina.

Este artículo de MSDN Cómo: Crear y terminar subprocesos (Guía de progtwigción C #) tiene algunas notas y algunos ejemplos de códigos que probablemente le resulten útiles.

No es necesario que termine un hilo manualmente una vez que la función haya finalizado.

Si genera un hilo para ejecutar un método, una vez que el método ha regresado, el hilo se cerrará automáticamente ya que no tiene nada más que ejecutar. *

Por supuesto, puede abortar manualmente un hilo simplemente llamando a Abort() , pero esto no es recomendable debido a la posible corrupción del estado del hilo debido a la determinación no confiable de dónde está el hilo en su estado de ejecución actual. Si necesita manejar la destrucción de los hilos usted mismo, es mejor que use un CancellationToken . También puede leer el artículo sobre cancelación de hilos gestionados en MSDN.

** Es decir, a menos que estés usando un ThreadPool para realizar tu trabajo. No debe preocuparse por abortar estos subprocesos a medida que se reutilizan en las diferentes tareas en cola.

 Thread.Abort() Thread.Join(); Thread = null;