Agendar tarefa no ASP.NET
Eu estou tentando criar um agendador de tarefas que é executado duas vezes por dia. Eu implementei um agendador de tarefas usando CacheItemRemovedCallaback, como sugerido emesta postagem eeste blog. Eu tenho o recurso que permite ao administrador modificar os horários programados e salvá-los nas variáveis do aplicativo:
protected void UpdateSchedule(object sender, EventArgs e)
{
Button button = sender as Button;
if (button.ID == "scheduleButton1")
{
Application.Lock();
Application["buildSchedule1"] = GetScheduleTime1;
Application.UnLock();
}
else if (button.ID == "scheduleButton2")
{
Application.Lock();
Application["buildSchedule2"] = GetScheduleTime2;
Application.UnLock();
}
HttpRuntime.Cache.Remove(Global.DummyCachekey); //remove current scheduled task and set new time
}
E no Global.aspx eu tenho:
protected void Application_Start(object sender, EventArgs e)
{
Application.Lock();
Application["buildSchedule1"] = new TimeSpan(10,00, 0); //default time
Application["buildSchedule2"] = new TimeSpan(16,00, 0); //default time
Application.UnLock();
SheduleTask();
};
O problema é que, por algum motivo (provavelmente devido à reciclagem do pool de aplicativos), os horários são redefinidos e, algumas vezes, a tarefa não é iniciada nos horários padrão.
Eu encontrei soluções que mencionam serviços do Windows ou agendador de tarefas do Windows, mas isso não funciona para mim, pois eu preciso permitir que o administrador configure os horários através do aplicativo da Web. (Eu procuro por isso, mas não consegui encontrar nada).