Tengo una función simple Azure Worker ejecutándose que realiza una tarea cada pocos segundos. A continuación se muestra el código que logra esto.Realizar tareas a diferentes intervalos en Azure Worker Role
public override void Run()
{
try
{
while (true)
{
DoSomething();
System.Threading.Thread.Sleep(3000);
}
}
catch (Exception ex)
{
Log.Add(ex, true);
}
}
Lo que me gustaría hacer ahora es añadir una segunda tarea DoSomethingElse() que dispara una vez y sólo una vez al día. He pensado en un par de maneras de lograr esto:
- Añadir un contador que llama a la nueva tarea cada bucle enésimo
- Añadir lógica condicional para la nueva tarea que compara el tiempo actual en un tiempo prescrito de día
- usan alguna biblioteca TBD planificador (como Quartz.NET)
las dos primeras soluciones me parecen muy frágil y sin código adicional para hacer frente a situaciones en las que el servicio se detiene y reinicia. La tercera solución me parece potencialmente excesiva.
Mi pregunta es, ¿cuál es la mejor práctica para programar tareas en diferentes intervalos dentro de una función de trabajador de Azure? Tengo una ligera preferencia por seguir con .NET directo y no usar una biblioteca de terceros (aunque no estoy descartando).
Nota, # 3 anterior proviene de esta cuestión mayores Recommend a C# Task Scheduling Library
Digamos por el momento que persisto los datos de ejecución en una base de datos SQL Azure. Podría crear una verificación simple en DoSomethingElse() que hace ping a la base de datos para determinar cuándo se ejecutó por última vez. Esto significaría hacer ping en la base de datos para realizar esa comprobación cada 3 segundos. ¿Es una mala idea? Son muchos viajes innecesarios a la base de datos. Pero, de nuevo, es poco probable que el servidor de la base de datos se vea forzado por tales transacciones triviales. ¿Pensamientos? – hughesdan