1

我希望我的 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 分钟)之后,触发器不再触发。使用 Timer,我不确定触发器在多少间隔后停止触发。

4

2 回答 2

1

(注意:我发布这个答案已经晚了,但对于任何绊倒这个的人来说,我的两分钱都在下面)

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

尝试将应用程序池(高级设置)中的空闲超时从 20 更改为 0。我在处理一些队列内容时遇到了类似的问题。此更改应使应用程序保持正常运行并运行计时器。

于 2014-01-26T21:43:04.393 回答
0

ASP.Net 不是您所描述的长时间运行或定期运行的进程的首选平台,尽管我不确定为什么您的计时器停止触发。

然而,这是一个想要完成几乎与概述他的方法相同的事情的人的帖子:

http://www.west-wind.com/weblog/posts/2007/May/10/Forcing-an-ASPNET-Application-to-stay-alive

于 2012-03-24T01:23:36.187 回答