1

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 アプリケーションを介して時間を構成できるようにする必要があるため、それはうまくいきません。(これを検索しましたが、何も見つかりませんでした)。

4

2 に答える 2