Estoy intentando escribir una ThreadManager para mi C# aplicación. Creo varios hilos:
Un hilo para mi escritor de texto.
Un hilo que supervisa algunas estadísticas.
múltiples hilos para llevar a cabo una gran secuencia de cálculos (hasta 4 hilos por núcleo y ejecutar mi aplicación en un servidor de cuatro núcleos 2x).El cierre de una aplicación multiproceso
Mi aplicación se ejecuta normalmente durante hasta 24 horas a la vez, por lo que todos los hilos se crean en el principio y que persisten a través de toda la vez que se ejecuta la aplicación.
Quiero tener un solo lugar donde "registrar" todas mis bandas de rodadura y cuando la aplicación se está cerrando, simplemente invoco un método y pasa por todos los hilos registrados y los apaga.
Para ello he ideado la clase siguiente:
public class ThreadManager
{
private static Object _sync = new Object();
private static ThreadManager _instance = null;
private static List<Thread> _threads;
private ThreadManager()
{
_threads = new List<Thread>();
}
public static ThreadManager Instance
{
get
{
lock (_sync)
{
if (_instance == null)
{
_instance = new ThreadManager();
}
}
return _instance;
}
}
public void AddThread(Thread t)
{
lock (_sync)
{
_threads.Add(t);
}
}
public void Shutdown()
{
lock (_sync)
{
foreach (Thread t in _threads)
{
t.Abort(); // does this also abort threads that are currently blocking?
}
}
}
}
que quieren asegurarse de que todos mis hilos son matados por lo que la aplicación puede cerrar correctamente y apagar en el medio de algún cálculo es bien también. ¿Debería estar al tanto de algo aquí? ¿Es este enfoque bueno dada mi situación?
¡WOW! Muchas buenas respuestas ... es difícil elegir ahora. Le di la marca a Nate porque era el primero, y sería injusto quitársela. Veamos qué dicen los votos. Obtengo algo útil de todas sus respuestas, así que por favor vote sus corazones. – Kiril
El comportamiento predeterminado de los hilos del grupo de subprocesos es el mismo que el sugerido. Si no te importa que tus hilos no terminen, el mío es la solución más simple. Obviamente, las otras respuestas aportan buenos puntos sobre la administración de hilos, pero específicamente indica que matar hilos en el medio de un cálculo está bien. –
Estoy de acuerdo contigo, Nate;), no te voy a quitar la marca de verificación, porque sería injusto y me dabas la respuesta más precisa, rápida y simple ... Sí quiero que otras personas obtengan su feria crédito, entonces quiero que todos voten por todas las buenas respuestas. – Kiril