Използвайте System.Threading.Timer или Quartz в ASP.NET

Искам моето 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 минути), спусъкът вече не се задейства. При таймера не съм сигурен след колко интервала спусъкът спира да стреля.


person Kevin Le - Khnle    schedule 24.03.2012    source източник
comment
защо не използвате Quarz с cron тригер?   -  person Gustavo F    schedule 24.03.2012


Отговори (2)


(Забележка: пускам този отговор е много късно, но за всеки, който се натъкне на това, моите два цента са по-долу)

Причината за 20 минути звучи като idle timeout... по подразбиране е 20 минути.

Опитайте да промените времето за изчакване на неактивност в набора от приложения (разширени настройки) от 20 на 0. Имах подобен проблем с някои неща на опашката, с които работех. Тази промяна трябва да накара приложението да остане включено и таймерът да работи.

person Robin Rieger    schedule 26.01.2014

ASP.Net не е предпочитаната платформа за дълготрайни или периодично изпълняващи се процеси, каквито описвате, въпреки че не съм сигурен конкретно защо вашите таймери спират да се задействат.

Ето обаче публикация от някой, който искаше да постигне почти същото нещо, което очертава неговия подход:

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

person Eric J.    schedule 24.03.2012