1 日に 2 回実行されるタスク スケジューラを作成しようとしています。この投稿とこのブログで提案されているように、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 アプリケーションを介して時間を構成できるようにする必要があるため、それはうまくいきません。(これを検索しましたが、何も見つかりませんでした)。