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