这个问题正在罢工......
您应该避免
async void
。 async void
适用于事件处理程序;大多数其他用法都是误用。 async Task
是没有返回值的 async
方法的自然签名。
因此,将
ListenForUdpMessages
和 ListenForHttpConnections
更改为 async Task
而不是 async void
。
这就提出了一个问题:“我应该如何处理这些任务?”。您的
ExecuteAsync
调用这两种方法;它应该对他们做点什么。 await
一次运行它们并不是一个好主意,因为您希望它们同时运行。异步并发的解决方案是使用Task.WhenAll
,类似这样:
_logger.LogInformation("Worker running at: {RunningTime}", DateTimeOffset.Now);
var udpTask = _hubService.ListenForUdpMessages();
var httpTask = _managementService.ListenForHttpConnections();
await Task.WhenAll(udpTask, httpTask);
现在,
ExecuteAsync
中的异常处理将适用于从这些方法传播的异常。
旁注: