Планирование asp.net (4.x) и quartz.net (3.0.7.0) quartz_jobs.xml в Global.asax Application_Start - PullRequest
0 голосов
/ 22 февраля 2019

Все было хорошо для моего небольшого домашнего проекта, работающего под iis 8 до quartz.net 3.x и асинхронного направления, которое потребовалось.Поскольку я заинтересован в том, чтобы следовать общей эволюции до 3.x, у меня возникают проблемы во время выполнения, по которым я не могу найти онлайн-решение.

Может кто-нибудь показать мне пример того, как планировать работу вasp.net 4.x метод global.asax application_start, использующий файл quartz_jobs.xml.

Я получаю следующее сообщение об ошибке во время выполнения: System.InvalidOperationException: 'Запуск не может быть вызван для задачи, которая имеетзавершено. '

Код, который был запущен:

Task<IScheduler> scheduler;
protected void Application_Start(object sender, EventArgs e)
{
  StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory();
  scheduler = stdSchedulerFactory.GetScheduler();
  scheduler.Start(); /* the line that is responsible for the runtime error */
}

Мне известны возражения против планирования заданий в IIS, но я хочу сделать это после рассмотрения, поэтому любой пример того, как этого избежатьошибка будет принята с благодарностью.

С уважением.

1 Ответ

0 голосов
/ 22 февраля 2019

GetScheduler() в Кварце 3 не возвращает IScheduler.Возвращает Task<IScheduler>.Это совпадение, что оба типа, Task и IScheduler, имеют метод Start().

Для преобразования Task<IScheduler> в IScheduler в синхронном методе, таком как Application_Start, сначала нужно подождатьчтобы задача завершилась и затем получила результат.

var realScheduler = scheduler.GetAwaiter().GetResult();
realScheduler.Start().Wait(); // you have to wait here too, because IScheduler.Start is also async
...