Обработка задержек во время запросов остановки / паузы в службе Windows
У меня есть класс обслуживания Windows, производный отServiceBase
который используетSystem.Timers.Timer
запускать код с частыми интервалами. Обработчики дляOnStop
а такжеOnPause
используйте некоторую сигнализацию с потоком таймера, чтобы проверить, работает ли таймер и ожидает ли он его завершения.
Есть ли рекомендуемый способ обработки ошибок задержки в этой ситуации, например, если обработчик ожидает недопустимо долгое время для остановки потока таймера?
Должен ли я просто ждать, пока SCM не сдастся (но это переведет службу в состояние, когда вы ничего не можете сделать со службой, кроме как завершить процесс, и иногда перезагрузка является единственным способом перезапустить его)? Или я мог бы выдать исключение, возможно (это оставило бы его в аналогичном состоянии, или просто отменить запрос на остановку / паузу)?
Я бы предпочел, чтобы я мог отклонить запрос на паузу / остановку и заставить SCM оставить его в состоянии, когда пользователь может попытаться снова приостановить / остановить. Я мог бы прервать поток таймера, но иногда он заблокирован на других ресурсах, которые я предпочел бы подождать до завершения, и просто регистрировалась ошибка с администратором, который мог попытаться остановить позже.