У меня есть веб-приложение, на котором запущено множество заданий обработки данных на бэкэнд, поэтому вместо того, чтобы увязнуть с сервером, я хочу запланировать задания и решил дать Quartz. Чистый ход.планирование веб-сервисов в Quartz.Net - служба windows или singleton
Очевидная вещь, которую я предполагаю, заключается в создании планировщика как службы Windows. У меня что-то подобное работает, но найти службу Windows немного боль по нескольким причинам (один из них, если он сбой, его нужно перезапустить вручную).
Я думал, что более элегантный способ будет создать службу как синглтон, мои вопросы будут:
, если у меня есть несколько вызовов ASHX бэкэнда, можно просто объявить его как это:
public static IScheduler Scheduler { get; private set; }
в каждом ASHx и было бы одноэлементно во всех серверных вызовах?
Могу ли я проверить выполнение заданий
scheduler.GetCurrentlyExecutingJobs();
и закрывающие планировщик вниз, если их нет?Основная причина, по которой я хочу использовать Quartz.Net, - ограничить количество заданий, выполняемых одновременно, поэтому в основном я просто создаю простые задания, которые выполняются сейчас. Поэтому из того, что я прочитал, если нет доступных потоков, задание будет отклонено, а затем обработано после того, как потоки станут доступными снова.
scheduler.GetCurrentlyExecutingJobs();
возвращает все отклоненные/ожидающие задания?- Как запустить планировщик, если он не работает? Он может быть недоступен, потому что IIS закрыл его или потому, что мой код закрыл его, если никаких заданий не запущено. В идеале, если я добавлю новое задание, планировщик запустится. Думаю, я мог бы поддерживать собственный список заданий в массиве и управлять им так - или есть ли способ сделать это через Quartz напрямую? Или мне лучше сделать планировщик постоянным, как это - IIS app pool recycle + quartz scheduling?