Я работаю над службой Windows, которой необходимо планировать задачи при вызове одной из ее веб-служб.Это может происходить сотни раз в секунду в худшем случае.Задача должна ждать период времени, обычно минуту или две, а затем вызывать метод, передающий параметр.
Мы попытались создать собственный класс планировщика, чтобы сделать это:
public void ScheduleTask<T>(TimeSpan delay, Action<T> task, T arg)
{
Thread.Sleep(delay);
threadPool.ExecuteAsync(task, arg);
}
Но мы подумали, что это будет неуместно, потому что теоретически мы можем получить сотни потоков потоков, ожидающих все.У меня сложилось впечатление, что существует ограниченное число доступных потоков пула потоков, и это может потенциально заблокировать систему.
Затем я обратился к Quartz.NET и прочитал на страницу их функций that:
Экземпляры классов заданий могут создаваться Quartz.NET или платформой вашего приложения.
и на странице 3 их учебного пособия что планировщик создает экземпляры вашего класса Job (не вас), и поэтому:
не имеет смысла определять элементы данных в классе задания, поскольку их значения будут "очищены"каждый раз, когда задание выполняется.
Не стесняйтесь кричать на меня, но как мне получить ссылку на мой экземпляр класса Job до его выполнения, чтобы я мог установить для него свойство?
- Свойство выполняет задание параметра, поэтому я не заинтересован в нем после выполнения задания.
- Я также хочу минимизировать количество объектов, необходимых для достижения этого, чтобы сохранить мой код аккуратным и простым .
- Наконец, я серьезноне нравится использовать словари, поэтому предпочел бы избегать объекта JobDataMap.