Чтобы получить полный ответ, нам нужно увидеть структуру вашего цикла обработки сообщений. Но я думаю, что метод ServiceBase.RequestAdditionalTime()
используется для того, чтобы SCM не жаловался, если команда останова (или пауза, продолжение, запуск) занимает слишком много времени, это не значит, что ваша служба будет ждать две минуты, прежде чем остановка.
Таким образом, единственное, что он действительно делает, это предотвращает ошибку SCM при запросе на остановку, если у вас медленный процесс остановки.
См. MSDN здесь: Метод RequestAdditionalTime ()
Что меня интересует, так это если вас вызывают в OnStop()
и вы устанавливаете какой-либо флаг завершения, и цикл обработки немедленно завершается, когда видит этот флаг?
Если бы вы могли опубликовать свой код, это помогло бы мне уточнить этот ответ, но из вопроса мне интересно, ожидаете ли вы, что вызов подождет 2 минуты, чтобы позволить ему обрабатывать больше, но вы настраиваете что-то, чтобы сообщить циклу обработки прекратить. Если это не так, я могу уточнить ответ дальше.
Что касается того, как долго вы должны ждать, это зависит от того, насколько критически важны электронные письма и сколько их может находиться в очереди, и если они сохранятся где-либо, чтобы перезапуск службы продолжал с того места, на котором они остановились.