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的文本为'完成’,同时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);
Run Code Online (Sandbox Code Playgroud)