【发布时间】:2014-08-13 04:17:49
【问题描述】:
我可能已经使自己陷入了一种相当不成熟的困惑。请参考以下代码(控制台应用)
namespace Tasks101
{
class Program
{
static void Main(string[] args)
{
Program p = new Program();
var x = p.Blah();
}
private async Task Blah()
{
await Task.Delay(TimeSpan.FromSeconds(3)).ConfigureAwait(false);
}
private async void ReturnsVoid()
{
await Task.Delay(TimeSpan.FromSeconds(3)).ConfigureAwait(false);
}
private void Nothing()
{
}
}
}
我的问题是,在 Blah() 方法中,当它执行时我还没有任何明确的 return 语句
var x = p.Blah();
x 的类型是Task。同样,ReturnsVoid 方法中没有返回语句,但也可以编译。
所以问题是
- 什么是从
Blah方法返回Task而我没有return语句,为什么同样的事情没有从ReturnsVoid方法返回任何东西。 - 如何控制
Blah方法返回的内容?如果我有两个一个接一个的等待语句怎么办?
【问题讨论】:
-
这是编译器的魔法。当您返回
Task时,会包含整个方法,而不仅仅是一个语句。您应该将所有内容视为您等待的一个内聚块,并在内部等待其他块。
标签: c# .net task-parallel-library async-await