Ответ 1
Метод Run
должен блокироваться. Из документы:
Если вы переопределите метод Run, ваш код должен блокироваться бесконечно. Если метод Run возвращается, роль автоматически перерабатывается, поднимая событие Stopping и вызывая метод OnStop, чтобы ваши последовательности выключения могли быть выполнены до того, как роль была отключена.
Простое решение состоит в том, чтобы просто сделать это:
public override void Run()
{
RunAsync().Wait();
}
public async Task RunAsync()
{
while (true)
{
await Task.Delay(60000);
}
}
В качестве альтернативы вы можете использовать AsyncContext
из моей библиотеки AsyncEx:
public override void Run()
{
AsyncContext.Run(async () =>
{
while (true)
{
await Task.Delay(60000);
}
});
}
Какой бы вариант вы ни выбрали, Run
не должен быть async
. Это похоже на Main
для консольного приложения (см. Мой блог, почему async Main
не разрешено).