Обработка задержек во время запросов остановки / паузы в службе Windows

У меня есть класс обслуживания Windows, производный отServiceBase который используетSystem.Timers.Timer запускать код с частыми интервалами. Обработчики дляOnStop а такжеOnPause используйте некоторую сигнализацию с потоком таймера, чтобы проверить, работает ли таймер и ожидает ли он его завершения.

Есть ли рекомендуемый способ обработки ошибок задержки в этой ситуации, например, если обработчик ожидает недопустимо долгое время для остановки потока таймера?

Должен ли я просто ждать, пока SCM не сдастся (но это переведет службу в состояние, когда вы ничего не можете сделать со службой, кроме как завершить процесс, и иногда перезагрузка является единственным способом перезапустить его)? Или я мог бы выдать исключение, возможно (это оставило бы его в аналогичном состоянии, или просто отменить запрос на остановку / паузу)?

Я бы предпочел, чтобы я мог отклонить запрос на паузу / остановку и заставить SCM оставить его в состоянии, когда пользователь может попытаться снова приостановить / остановить. Я мог бы прервать поток таймера, но иногда он заблокирован на других ресурсах, которые я предпочел бы подождать до завершения, и просто регистрировалась ошибка с администратором, который мог попытаться остановить позже.