Вот обзор того, на что я нацелен:Приостановка Windows Service thread?
У меня есть служба Windows, которая вначале проверит наличие конкретной базы данных на этом сервере для любых доступных очередей. Если очередь найдена, она должна начать обработку (довольно просто и прямо). Если очередей не найдено, мне нужна услуга для сортировки «сна» в течение 15 минут, а затем «перезагрузка». Если очереди найдены, начните обработку, иначе спящие еще 15 минут и «перезапустите».
Как я могу это сделать? Я посмотрел на метод System.Threading.Sleep, но, по-видимому, это очень плохое кодирование. Я понимаю, что спящий поток, блокирует любые последующие методы, которые выполняются, что хорошо - как после Света служба будет вызывать тот же метод для «перезапуска» обработки.
Я также посмотрел на System.Threading.Timer, но иногда система просто прекращает обслуживание полностью. В средстве просмотра событий есть несколько ошибок, связанных с каким-то исключением, но когда я вручную запускаю службу, он автоматически обрабатывает очереди, указывая, что в моем кодировании нет ничего плохого.
Каков наилучший способ приостановить поток обслуживания в течение 15 минут, а затем снова вызвать метод обработки. Он должен оставаться в цикле постоянной проверки доступных очередей. Как только один найден, выполните обработку, и если ни один не найден, просто спите в течение 15 минут?
Обратите внимание, что основная служебная нить не обязательно (обязательно) должна оставаться в живых; диспетчер служб создает собственный поток для вызова функции обработчика. Конечно, если ваша функция обработчика отправляет сообщения в основной поток службы, вам нужно их слушать. :-) –