Используйте System.Threading.Timer или Quartz в ASP.NET - PullRequest
1 голос
/ 24 марта 2012

Я хочу, чтобы мое приложение 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 я также заменяю его на эквивалентный Кварцу код, но через некоторое время он также прекращает работу.

Так что возникает вопрос, является ли Application_Start () правильным местом или есть лучшее место?

Подходы Таймера и Кварца работают.Но с Quartz, похоже, что на интервале в 1 минуту, после 20 интервалов (20 минут), триггер больше не срабатывает.С Таймером я не уверен, через сколько интервалов срабатывает триггер.

Ответы [ 2 ]

1 голос
/ 27 января 2014

(Примечание: я выпускаю, это слишком поздно для этого ответа, но для тех, кто спотыкается об этом, мои два цента ниже)

Причина 20 минут звучит как iis idle timeout ... по умолчанию 20минут.

Попробуйте изменить время простоя в пуле приложений (расширенные настройки) с 20 на 0. У меня была похожая проблема с некоторыми вещами из очереди, с которыми я работал.Это изменение должно привести к тому, что приложение будет работать и таймер будет запущен.

0 голосов
/ 24 марта 2012

ASP.Net не является предпочтительной платформой для длительных или периодических процессов, которые вы описываете, хотя я не уверен, почему ваши таймеры прекращают работу.кем-то, кто хотел сделать почти то же самое, что и его подход:к оставать-жив

...