Таймер в Windows Service .. Будет ли это масштабировать нормально? Возникнут ли проблемы с потоками? Это плохая практика? - PullRequest
0 голосов
/ 21 марта 2019

Мне интересно узнать, какие у меня проблемы с этим подходом. Код будет проверять таблицу SQL для запланированной работы, и я изменю таймер, чтобы он ничего не делал, пока работа не будет завершена. Является ли SQL Trigger жизнеспособным вариантом? А как насчет консольного приложения в расписании Windows?


protected override void OnStart(string[] args) {
   this.workChecker = new Timer(new TimerCallback(DoWork), null, 0, 60*10*1000); // 10 minutes
   Thread.Sleep(Timeout.Infinite);
}

1 Ответ

0 голосов
/ 21 марта 2019

Вы не должны блокировать OnStart, поэтому Thread.Sleep(Timeout.Infinite); не требуется. Опция таймера может работать, но, как вы можете видеть, есть некоторые проблемы с повторным входом (вы должны быть уверены, что новая работа не запускается, пока предыдущая работает, чтобы избежать условий гонки). Я бы посоветовал проверить библиотеку Quartz.NET , которая решает такие проблемы "из коробки" и обладает множеством других функций для запланированных заданий.

...