Pie*_*one 4 c# task-parallel-library async-await
我的问题是当一个Task有一个Task.WhenAll()调用(运行其他任务)时,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");
Run Code Online (Sandbox Code Playgroud)
我希望在执行DoLoadsOfWorkAsync()的最后一行时调用WriteLine().
我究竟做错了什么?提前致谢.
Ric*_*ard 19
Task.WhenAllTask立即返回一个新的,它不会阻止.传递完所有任务后,返回的任务将WhenAll完成.
它是异步的等价物Task.WaitAll,如果你想阻止它,这是使用的方法.
但是你有另一个问题.使用Task.Factory.StartNew和传递async委托似乎导致Task<Task>外部任务在内部任务开始执行时(而不是在完成时)完成的类型.
使用新版本Task.Run可以避免这种情况.
| 归档时间: |
|
| 查看次数: |
7383 次 |
| 最近记录: |