不使用await时,异步Task <t>()不会立即返回

时间:2018-07-27 07:37:37

标签: c# async-await task configureawait

如果我具有以下功能

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))

0 个答案:

没有答案