2012-03-24 94 views
1

我希望我的ASP.MVC应用程序充当后台任务的调度程序。该HttpApplication的,子类类具有以下代码:在ASP.NET中使用System.Threading.Timer或Quartz

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,我也通过石英等效代码替换它,但它也停止了一段时间后发射。

那么这个问题,就是Application_Start()适当的地方还是有更好的地方?

定时器和Quartz方法都可以工作。但是对于Quartz来说,似乎是间隔1分钟,在20个间隔(20分钟)后,触发器不再触发。对于定时器,我不确定触发器停止触发的时间间隔。

+0

为什么你没有用cron触发器来使用Quarz? – 2012-03-24 01:20:11

回答

1

(注:我发布这个办法又迟到了答案,但任何人绊倒此我的两分钱低于)

20分钟的事情听起来像iis空闲超时...默认是20分钟。

尝试将应用程序池(高级设置)中的空闲超时从20更改为0.我遇到了一些与我一起工作的队列类似的问题。这种改变应该使应用程序保持运行状态并且定时器的东西运行。