Как перехватить исключение в службе windows при запуске Задачи? - PullRequest
0 голосов
/ 10 февраля 2020

Не 100% на самом деле с windows службами, у меня есть следующее:

protected override void OnStart(string[] args)
{
    _myManager.Start();
}

В MyManager:

public void Start()
{
    _myTask = Task.Run(DoStuff);
}

Теоретически, метод OnStart вернет и служба запустится успешно. async Task DoStuff() - это просто бесконечное число l oop (хотя оно прекратится, если служба остановлена).

Я хочу добавить к этому попытку / ловлю. В идеале это было бы в методе OnStart, чтобы я мог вызвать this.Stop(), чтобы остановить службу (так как это будет ServiceBase). Это делается для того, чтобы перехватывать любые исключения, которые я не обрабатывал явным образом, поэтому я могу зарегистрировать их и завершить работу службы.

Могу ли я просто обернуть попытку перехвата _myManager.Start();? Или мне нужно сделать что-нибудь умное с заданиями?

1 Ответ

1 голос
/ 10 февраля 2020

Вы захотите использовать «ContinueWith» и определить функцию обработчика ошибок, которая, вероятно, должна регистрировать ошибку в журнале событий Windows и останавливать службу.

Вы не хотите ждать / блокировать в OnStart (), потому что Windows ожидает, что он быстро вернется (и сообщит об ошибке, если она не запустится своевременно).

См. Здесь для дальнейшего обсуждения: Каков наилучший способ отловить исключение в Задаче?

...