Estoy escribiendo un servicio de Windows que una vez que se inicia se ejecutará cada X horas. El proceso que completa es bastante intensivo, por lo que quiero utilizar un trabajador de segundo plano. Estoy usando un archivo de configuración para almacenar tanto las horas entre las ejecuciones como la última vez que se ejecutó el servicio.Servicio de Windows que se ejecuta periódicamente
No estoy seguro de cuál es la mejor manera de hacerlo, es decir, quiero que el servicio permanezca inactivo utilizando la menor cantidad de recursos posible y, cuando se ejecuta, debe ejecutarse en segundo plano, informar qué lo hizo, y luego volver al modo inactivo.
He pensado en usar 2 trabajadores de fondo. El primer trabajador sería una variable privada local para el servicio que se ejecuta algo como esto:
while (true)
{
//create new background worker and run
Thread.Sleep(Settings.Default.SleepTimeHours * 3600000);
}
con un trabajador secundario que se crea cada iteración del bucle, y destruido cuando esté terminado. Para admitir la cancelación, creo que debería tener una instancia local del segundo trabajador disponible en el servicio, pero será nulo si el proceso no se está ejecutando actualmente. Cuando el trabajador secundario termina, enviará mi informe, establecerá el último tiempo de ejecución en el archivo de configuración y luego eliminará al trabajador y establecerá la referencia en nulo.
Me pregunto si hay una mejor manera de hacer esto o una mejor práctica.
Gracias
Para aquellos que sugiere utilizar el programador de tareas - Me propuso que como una opción, pero el arquitecto quiere que sea un servicio de Windows. – Josh
@Broken Bokken: Lo mejor de ambos mundos: http://www.genericgeek.com/Enable-a-service-from-command-line;) – JustLoren