我的问题是,当一个任务有一个Task.WhenAll()调用(运行其他任务)时,WhenAll()的这一行会使得代码继续执行,而不是像我所期望的那样等待所有参数中的任务都完成后再输出"finished"。因此,下面的代码在Task.WhenAll()被执行时立即输出"finished",而不是等到其参数中的所有任务全部完成后才输出。
// Just a simple async method
public Task DoWorkAsync()
{
return Task.Factory.StartNew(
() =>
{
// Working
});
}
// This one used the previous one with Task.WhenAll()
public Task DoLoadsOfWorkAsync()
{
return Task.Factory.StartNew(
async () =>
{
// Working
// This line makes the task return immediately
await Task.WhenAll(DoWorkAsync(), DoWorkAsync());
// Working
});
}
// Consuming code
await DoLoadsOfWorkAsync();
Console.WriteLine("finished");
我希望当DoLoadsOfWorkAsync()的最后一行被执行时,WriteLine()会被调用。
我错在哪里?提前感谢您的帮助。
Task.Run
及其作用的好处(以及为什么以及如何实现),请前往这里:http://blogs.msdn.com/b/pfxteam/archive/2011/10/24/10229468.aspx - ckozl