with visual threadstart threads thread new multi method example español book c# multithreading

visual - threadstart c#



Cómo abortar los hilos creados con ThreadPool.QueueUserWorkItem (6)

¿Hay alguna manera de abortar los hilos creados con QueueUserWorkItem?

O tal vez no necesito? ¿Qué sucede si la aplicación principal sale? ¿Se ha abortado automáticamente todo el hilo creado desde él?


No necesita abortarlos. Cuando su aplicación finalice, .NET matará cualquier subproceso con IsBackground = true. .NET threadpool tiene todos sus subprocesos configurados en IsBackground = true, por lo que no tiene que preocuparse por ello.

Ahora bien, si está creando subprocesos al actualizar la clase Thread, deberá cancelarlos o establecer su propiedad IsBackground en verdadero.


Sí lo harán. Sin embargo, si está utilizando recursos no administrados en esos hilos, puede terminar en muchos problemas.


The threadpool usa subprocesos de fondo. Por lo tanto, todos se cerrarán automáticamente cuando la aplicación finalice.

Si quiere abortar un hilo usted mismo, tendrá que administrar el hilo usted mismo (para que pueda llamar a Thread.Abort () en el objeto de hilo) o tendrá que configurar algún mecanismo de notificación que le permita Dile al hilo que debería abortarse.


Sin embargo, si está utilizando recursos no administrados en esos hilos, puede terminar en muchos problemas.

Eso dependería más bien de cómo los estuvieras usando: si estos recursos no administrados se ajustaran correctamente, se tratarían con la finalización de la envoltura, independientemente del mecanismo utilizado para eliminar los hilos que los habían referenciado. Y los recursos no administrados son liberados por el sistema operativo cuando una aplicación sale de todos modos.

Existe la sensación general de que las aplicaciones (de Windows) pasan demasiado tiempo intentando limpiar el apagado de la aplicación (a menudo con paginación) en grandes cantidades de memoria para poder volver a descartarla (o el código de paginación que se ejecuta alrededor liberando objetos no manipulados con los que el sistema operativo se ocuparía de todos modos).


sí, son de fondo, pero f.ex si tienes una aplicación donde utilizas ThreadPool para algunas descargas un poco múltiples o cosas, y quieres detenerlos, ¿cómo te detienes? mi sugerencia sería: salir del hilo lo antes posible, f.ex

bool stop = false; void doDownloadWork(object s) { if (!stop) { DownloadLink((String)s, location); } }

y si establece stop = true, los segundos subprocesos (actualmente en cola) saldrán automáticamente, luego de que los subprocesos de la cola finalicen su proceso.


De acuerdo con la respuesta de Lukas Šalkauskas

Pero deberías usar:

volatile bool stop = false;

para decirle al compilador que esta variable es utilizada por varios hilos.