ASP.MVC アプリケーションをバックグラウンド タスクのスケジューラとして機能させたいと考えています。HttpApplication でサブクラス化されたクラスには、次のコードがあります。
public class MvcApplication : System.Web.HttpApplication
{
private Timer Timer;
protected void Application_Start()
{
if (Timer == null)
{
TimerCallback cb = OnTimerElapsed;
AutoResetEvent autoEvent = new AutoResetEvent(false);
Timer = new Timer(cb, autoEvent, INITIAL_DELAY, TIMER_INTERVAL);
}
}
private void OnTimerElapsed(Object stateInfo)
{
//perform background task
}
}
また、System.Threading.Timer を使う代わりに、Quartz 相当のコードにも置き換えていますが、これもしばらくすると発火しなくなります。
Application_Start() は適切な場所ですか、それともより良い場所がありますか?
Timer と Quartz の両方のアプローチが機能します。しかし、Quartz では、1 分間の間隔のように見え、20 間隔 (20 分) 後にトリガーが起動しなくなります。タイマーを使用すると、トリガーが発射を停止する間隔が何回になるかわかりません。