我想尝试使用后台 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 个标签(label1
、label2
、label3
)的值.即所有标签都设置为“待定”,当每个任务完成时,它们对应的标签值将更改为“已完成”。
我想相应地等待
每个任务,以便他们各自执行自己的相应任务。这意味着如果 taskDelay1
的工作完成,则将 label1
的文本设置为“已完成”,而 taskDelay2
和 taskDelay3
仍在等待中。但是,如果我将 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/