3个并行任务,每个任务等待自己的结果

dis*_*kid 1 c# asynchronous async-await

我想尝试使用后台工作者.我很有意思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 ???
}
Run Code Online (Sandbox Code Playgroud)

假设每个任务的改变的3个标签(该值label1,label2,label3)在窗体上当他们完成.即所有标签都设置为"待定",当每个任务完成后,其相应的标签值将变为"已完成".

我希望await相应的每个任务,以便他们每个人都做自己相应的任务.这意味着,如果taskDelay1的作业完成一系列label1的文本为'完成’,同时taskDelay2taskDelay3目前仍在等待.但是如果我把3放在awaits那里,程序将等待所有人完成他们的任务,然后继续其余的代码.

如何继续其余的代码,其中每个标签只等待自己的任务完成,然后决定该怎么做?

Vse*_*nin 5

您应该使用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);
Run Code Online (Sandbox Code Playgroud)