tengo un servicio de Windows escrito en .NET 3.5 (C#) con un System.Threading.Timer que genera varios hilos en cada devolución de llamada. Estos son solo hilos normales (sin conjunto de hilos) y establecí el IsBackground = true en cada hilo, ya que solo voy a ejecutar el código administrado.El cierre de un servicio de Windows que tiene roscas
Cuando un usuario se detiene el servicio, lo que ocurre con todos los hilos? ¿Mueren con gracia? No tengo ningún código que administre los subprocesos a través de invocación join o abortar. ¿Es correcto suponer que IsBackground = true es suficiente para asumir que los hilos serán eliminados y detenidos cuando un usuario detiene el servicio? ¿Qué ocurre exactamente cuando alguien detiene un servicio de Windows a través de la GUI de Service Manager? ¿Mata el proceso después de que se activa el evento OnStop?
realidad, esto sería aceptable para mí, porque yo he construido un mecanismo separado que permite al usuario saber con certeza que no hay hilos antes de que dejen el servicio. Esto se hace a través de 2 métodos WCF expuestos desde un ServiceHost que se ejecuta dentro del Servicio de Windows. Hay un método para detener el engendramiento de nuevos hilos y otro método para consultar cuántos subprocesos en ejecución quedan.
Tengo curiosidad de lo que sucede si se saltan los pasos y sólo dejan el servicio ... Parece que la IsBackground ayuda a lograr este objetivo:
Gracias, esto funciona muy bien! – ECC