我正在尝试创建一个每天运行两次的任务调度程序。我已经使用 CacheItemRemovedCallaback 实现了一个任务调度程序,正如这篇文章和这篇博客中所建议的那样。我有一个功能可以让管理员修改预定时间,并将它们保存在应用程序变量中:
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
}
在 Global.aspx 我有:
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();
};
问题是由于某种原因(可能是由于应用程序池回收)计划时间被重置,甚至有时任务不会在默认时间开始。
我找到了提到 Windows 服务或 Windows 任务计划程序的解决方案,但这对我不起作用,因为我需要能够让管理员通过 Web 应用程序配置时间。(我搜索这个,但找不到任何东西)。