如果我具有以下功能
public async Task<bool> Foo()
{
// call many async functions
await Bar1().ConfigureAwait(false);
await Bar2().ConfigureAwait(false);
return await Bar3().ConfigureAwait(false);
}
如果我调用上面的函数
var t1 = Foo();
var t2 = Foo();
...
await Task.WhenAll(t1, t2).ConfigureAwait(false);
t2直到t1完成才执行,因此调用WaitAll
有点毫无意义。
但是如果我打电话
...
var t1 = Task.Run( async () => await Foo().ConfigureAwait(false));
var t2 = Task.Run( async () => await Foo().ConfigureAwait(false));
...
await Task.WhenAll(t1, t2).ConfigureAwait(false);
t1和t2立即返回...
现在,如果我跑步...
...
var t1 = Task.Run( () => Foo());
var t2 = Task.Run( () => Foo());
...
await Task.WhenAll(t1, t2).ConfigureAwait(false);
t1和t2也立即返回...
为什么Foo()不立即返回任务?
而且,我应该打电话给Task.Run( () => Foo())
还是Task.Run( async () => await Foo().ConfigureAwait(false))