如何在.NET后台服务中并行执行多个异步任务?
并行执行异步任务的解决方案
当前你的代码中,每次调用await都会阻塞直到前一个任务完成,导致三个任务串行执行。要让它们同时启动并并行运行,只需调整任务的启动和等待方式:
修改Worker.cs的ExecuteAsync方法
核心是先启动所有任务,再用Task.WhenAll等待全部完成:
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { logger.LogInformation("StatusWorker running at: {time}", DateTimeOffset.Now); // 1. 启动所有任务(此时三个任务会同时开始执行) var task1 = statusProcess.GetSystemStatus(); var task2 = statusProcess.GetProcessesWithError(); var task3 = statusProcess.GetNumberofProcessesInLastDay(); // 2. 等待所有任务完成 await Task.WhenAll(task1, task2, task3); } }
关键说明
- 直接调用
statusProcess.GetXXX()而不立即await,会让任务立即开始执行,而非等待前一个任务完成 Task.WhenAll会等待传入的所有Task对象都完成后,才继续执行后续代码- 如果后续需要处理每个任务的返回值(比如方法有返回类型),可以在
WhenAll后分别获取对应任务的结果
内容的提问来源于stack exchange,提问作者Paul Viorel
相关产品推荐
相关产品推荐

