Эти переменные собирают мусор? - PullRequest
1 голос
/ 09 февраля 2012

Я пытаюсь заставить работать планировщик Quartz.net, но я не знаю, почему он не запускает задания, запланированные на будущее.Я проверил cron-триггер, который срабатывает каждую минуту, и он работает (работа и все), поэтому я знаю, что это не проблема с моим кодом работы.

Вещи, которые я пытался:

  1. Создание ISchedulerFactory глобальной статической переменной
  2. Создание IScheduler глобальной статической переменной
  3. Я добавилуведомление по электронной почте до конца Application_Start, чтобы я знал, когда оно запускается
  4. Каждый раз, когда я делаю изменения в коде планировщика, я перезапускаю приложение, и оно запускает мое уведомление по электронной почте, поэтому я знаю, что оно было перезапущено.*

Я запускаю эту программу в среде общего хостинга (не уверен, что это повлияет на нее).Мое предположение (и это только предположение) состоит в том, что происходит сбор мусора, но я не уверен, что и почему.

void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup
    // construct a scheduler factory
    ISchedulerFactory schedFact = new StdSchedulerFactory();

    // get a scheduler
    IScheduler sched = schedFact.GetScheduler();
    sched.Start();

    // construct job info
    JobDetail jobDetail = new JobDetail("myJob", null, typeof(Recorder));
    jobDetail.JobDataMap["domain"] = "www.mydomain.com";
    jobDetail.JobDataMap["userId"] = "2";

    // Create trigger (everything is in UTC!!!)
    CronTrigger cronTrigger = new CronTrigger("Schedule");
    cronTrigger.StartTimeUtc = TriggerUtils.GetEvenSecondDate(DateTime.UtcNow);
    cronTrigger.TimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");  // run in pacific timezone
    cronTrigger.CronExpressionString = "0 30 13 ? * MON-FRI *"; 

    sched.ScheduleJob(jobDetail, cronTrigger);
}

1 Ответ

2 голосов
/ 09 февраля 2012

Процесс ASP.NET может быть остановлен IIS, если не поступают запросы, поэтому ни один из этого кода не будет запущен.

Это причина, по которой веб-приложения не являются хорошим источником обслуживания-подобное (всегда работающее) поведение.

Я видел, как это реализовано в веб-приложении со страницей / веб-службой, которая получает команду ping с помощью инструмента cURL извне.

Есливы заинтересованы в дальнейшей отладке, добавьте некоторое уведомление в Application_End просто для того, чтобы убедиться, что процесс действительно завершен, прежде чем таймер запустит ваше запланированное задание.

...