[英]Await Task.WhenAll() inside task not awaiting
我的问题是,当一个Task有一个Task.WhenAll()调用(运行其他Tasks)时,WhenAll()的这一行使消耗代码继续执行,这与我的预期不同。 因此,以下代码在命中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.WhenAll
立即返回一个新Task
,但不会阻塞。 当传递给WhenAll
所有任务都完成时,返回的任务将完成。
它与Task.WaitAll
异步等效,并且这是您要阻止的方法。
但是,您还有另一个问题。 使用Task.Factory.StartNew
并传递async
委托似乎会导致Task<Task>
类型,其中内部任务开始执行时(而不是完成时)外部任务完成。
使用较新的Task.Run
可以避免这种情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.