c# - opciones - ¿Qué es mejor usar para un trabajo recurrente: servicio o tarea programada?
schtasks sd (4)
Tengo una tarea que debe ejecutarse cada 30 segundos. Puedo hacer una de estas dos cosas:
Escriba una aplicación de línea de comandos que ejecute la tarea una vez, espere 30 segundos, la vuelva a ejecutar y luego salga. Puedo programar esta tarea con tareas programadas en Windows para ejecutar cada minuto
Escriba un Servicio que ejecuta una tarea repetidamente mientras espera 30 segundos entre cada ejecución.
El número 1 es más trivial, en mi opinión, y optaría por hacerlo de esta manera por defecto. ¿Estoy cayendo? ¿Hay alguna razón por la que deba hacer de esto un Servicio y no una tarea programada? ¿Cuáles son los pros y los contras de ambos y cuál elegirías al final?
30 segundos es un intervalo bastante corto (en términos relativos) entre los ciclos de procesamiento. Al igual que los demás, tengo mis inquietudes sobre el programador de tareas y me temo que un intervalo tan corto solo agravará los problemas que podría encontrar si adoptara ese enfoque. Si este fuera mi proyecto, casi con toda seguridad iría con el servicio.
El programador de tareas en Windows parece un poco escaso en mi opinión. Creo que obtendrás un resultado más confiable corriendo como un servicio.
Además, un servicio podría mantener recursos en la memoria, como leer datos de un archivo, y solo tiene que hacer esto al inicio del servicio, no cada 30 segundos.
Si intentas ejecutar cada 30 segundos, elegiría la opción 2. Esto es más o menos un trabajo que se ejecuta continuamente, en ese caso. La sobrecarga de iniciar y detener el proceso es probablemente más alta que el proceso en sí, especialmente si usa un temporizador apropiado.
Si realiza un trabajo que se ejecuta una vez al día (o algunas veces al día), entonces optaría por la opción 1, utilizando una tarea programada.
Leí una buena publicación en el blog sobre esta pregunta recientemente . Va en una gran cantidad de buenas razones por las que no debe escribir un servicio para ejecutar un trabajo recurrente. Además, esta pregunta se ha hecho antes:
https://.com/questions/390307/windows-service-vs-scheduled-task Servicio de Windows o tarea programada, ¿cuál preferimos?
Una ventaja del uso de la tarea programada es que si hay algún riesgo potencial relacionado con la ejecución del servicio, como una pérdida de memoria o una conexión de red colgante, el servicio de Windows puede bloquearse durante mucho tiempo y afectar negativamente a otros usuarios. Por otro lado, la tarea programada se escribe para que sea de ejecución corta, por lo que incluso si se filtra, el efecto se minimiza.
Por otro lado, alguien en una de las preguntas anteriores comentó que el planificador tiene un límite de precisión en el rango de 1 minuto, por lo que puede ver que el planificador no puede ejecutar su tarea cada 30 segundos con precisión.
Obviamente, hay una serie de concesiones que considerar, pero espero que esto lo ayude a tomar una buena decisión.