Используй Console.Cancelkeypress и TaskCompletionSource, чтобы можно было закрыть нажатием ^C
Примерно так:
var cts = new TaskCompletionSource();
Console.CancelKeyPress += () => cts.SetResult();
await cts.Task;
Либо ты можешь использовать generic host (загугли) с IHostedService
Либо ты можешь перейти на asp net core и начать использовать вебхуки, вместо поллинга
Заворачивать ли это в виндовые сервис, чтобы он автоматом перезапускал при падении и запускал при включении - это на твоё усмотрение.