c# - 3 个并行任务,每个任务都在等待自己的结果

标签 c# asynchronous async-await

我想尝试使用后台 worker 。我对使用 async/await 很感兴趣。 我有 3 个并行任务。

private async void RunDownloadsAsync()
{
     Task taskDelay1 = Task.Run(() => Task.Delay(10000));
     Task taskDelay2 = Task.Run(() => Task.Delay(15000)); 
     Task taskDelay3 = Task.Run(() => Task.Delay(20000)); 
     await ???
}

假设这些任务中的每一个在完成时都会更改表单上的 3 个标签(label1label2label3)的值.即所有标签都设置为“待定”,当每个任务完成时,它们对应的标签值将更改为“已完成”。

我想相应地等待每个任务,以便他们各自执行自己的相应任务。这意味着如果 taskDelay1 的工作完成,则将 label1 的文本设置为“已完成”,而 taskDelay2taskDelay3仍在等待中。但是,如果我将 3 个 awaits 放在那里,程序将等待它们全部完成任务,然后继续执行其余代码。

我如何才能继续剩下的代码,其中每个标签只等待自己的任务完成,然后再决定要做什么?

最佳答案

您应该使用 Task.WhenAll 方法等待所有这些,并在任务完成时使用 ContinueWith 执行操作。

 Task taskDelay1 = Task.Run(() => Task.Delay(10000)).ContinueWith(t => SetLabel());
 Task taskDelay2 = Task.Run(() => Task.Delay(15000)).ContinueWith(t => SetLabel()); 
 Task taskDelay3 = Task.Run(() => Task.Delay(20000)).ContinueWith(t => SetLabel()); 
 await Task.WhenAll(taskDelay1, taskDelay2, taskDelay3);

关于c# - 3 个并行任务,每个任务都在等待自己的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27358278/

相关文章:

c# - Outlook 中 "Item Sent"上的事件

c# - 如何在 C#/Bouncy CaSTLe 中创建 PBKDF2-SHA256 密码哈希

javascript - 捕获两个并行运行的异步函数都执行完毕的时刻

c# - 我是否应该担心 "This async method lacks ' 等待运算符(operator)并同步运行“警告

c# - 如何将元组转换为异步任务

c# - 现有项目的 AWS CDK Init

c - 使用 libevent 的异步 Redis 池

c# - 带有 Async/Await 关键字的 WebRole 未在 Azure 上运行

c# - 跨 AppDomain 异步方法调用

C# winforms 绘制到位图无效参数