想了解async / await等待多个任务的想法。下面是@Stephen Clary的网页上的代码。我刚刚添加了方法DoIndependentJob1()和DoIndependentJob2()用于测试目的。
第一种方法(DoOperationsConcurrentlyAsync) 似乎对我很清楚(请确认我理解正确:
第二种方法(GetFirstToRespondAsync): - 我们运行2个任务,他们开始做这些工作 - 同时DoIndependentJob也运行。 - 现在我们等待2个任务中的任务(其中一个将是第1个) - 让我们说WebService1Async就是那个
然后呢? DoIndependentJob2()是否会被触发,即使WebService2Async仍在运行,并且意味着WebService2Async将被解雇并忘记在这种情况下因为我们不等待它?请不要澄清这一点......
public async Task DoOperationsConcurrentlyAsync()
{
Task[] tasks = new Task[3];
tasks[0] = DoOperation0Async();
tasks[1] = DoOperation1Async();
tasks[2] = DoOperation2Async();
// At this point, all three tasks are running at the same time.
//Doing some independent jobs
DoIndependentJob()
// Now, we await them all.
await Task.WhenAll(tasks);
//Doing some independent jobs
DoIndependentJob2()
}
public async Task<int> GetFirstToRespondAsync()
{
// Call two web services; take the first response.
Task<int>[] tasks = new[] { WebService1Async(), WebService2Async() };
//Doing some independent jobs
DoIndependentJob()
// Await for the first one to respond.
Task<int> firstTask = await Task.WhenAny(tasks);
//Doing some independent jobs
DoIndependentJob2()
// Return the result.
return await firstTask;
}
答案 0 :(得分:1)
是的,这是正确的。
您的GetFirstToRespondAsync
方法将等待任务完成,此时它将继续,firstTask
引用该任务。
当其他任务完成时并不重要。正如你所说,&#34;火,忘了&#34;,好吧,而不是&#34;火,然后可选择忘记&#34;。
所以当你从方法返回时,其他任务可能仍在运行,或者它可能已经完成,也许它甚至在第一个任务完成之后但在调用DoIndependentJob2
之前完成,谁知道。