3

MVC 3とC#でWebアプリケーションを使用しています。

1時間ごとに無制限の時間メソッドを実行する必要があります。実装方法を教えてください。

サンスク。

関連している

WindowsタスクスケジューラからMVCコントローラーを呼び出す

4

4 に答える 4

10

System.Timers.Timerを使用できます。ただし、ASP.NET アプリケーションで繰り返しバックグラウンド タスクを実装するのは危険な作業であることに注意してください。IIS はいつでも、状況によってはアプリケーション プールをリサイクルできることを忘れないでください (サイトでの非アクティブ期間、CPU/メモリのしきい値に達するなど)。開始した可能性のあるすべてのバックグラウンド タスクをダウンさせます。

これを行う正しい方法は、別のアプリケーションに実装することです。これは、たとえば、Windows サービスまたは Windows スケジューラで定期的に実行するようにスケジュールされた単純なコンソール アプリケーションである可能性があります。

于 2012-08-22T19:59:30.207 に答える
4

ダリンは正しいですが、アプリでそれを行う必要がある場合は、次のようにします。

Global.asax.cs 内

    static void ScheduleTaskTrigger()
    {
        HttpRuntime.Cache.Add("ScheduledTaskTrigger",
                              string.Empty, 
                              null, 
                              Cache.NoAbsoluteExpiration, 
                              TimeSpan.FromMinutes(60), // Every 1 hour
                              CacheItemPriority.NotRemovable, 
                              new CacheItemRemovedCallback(PerformScheduledTasks));
    } 

    static void PerformScheduledTasks(string key, Object value, CacheItemRemovedReason reason)
    {
       //Your TODO

       ScheduleTaskTrigger();
    }

    void Application_Start(object sender, EventArgs e)
    {
          ScheduleTaskTrigger();
    }
于 2012-08-22T20:02:27.817 に答える
0

理想的には、代わりに Windows サービスまたはスケジュールされたタスクを使用します

于 2012-08-22T20:01:29.253 に答える
-1

最善の方法は、Azure 関数を使用することです。まさにこの問題のために設計されました。それは実際にはかなり良いです。タイマー トリガーを使用して、スケジュールされたタスクをいつでも実行できます。

https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview

于 2019-04-03T23:51:10.963 に答える