我可能已经让自己陷入了相当不成熟的困惑之中。请参考下面的代码(控制台应用程序)
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()
方法执行时我还没有任何显式的返回语句
var x = p.Blah();
的类型x
is Task
。我再次没有返回声明ReturnsVoid
方法,但也可以编译。
所以问题是
- 什么是返回一个
Task
来自Blah
方法没有我有return
那里的声明以及为什么同样的事情没有返回任何内容ReturnsVoid
method.
- 我如何控制从
Blah
方法?如果我一个接一个地有两个等待语句怎么办?
The async
关键字转换方法并构造返回Task
实例。没有返回任何内容async void
方法,因为它返回void
;这种缺乏一个Task
这是你应该避免的原因之一async void
. async void
不是一个natural异步方法签名;它仅受支持,以便事件处理程序可以async
.
如果您想退回value,那么你应该让该方法返回一个Task<T>
, e.g., Task<int> BlahAsync()
,然后你可以直接返回值,例如,return 13;
的数量await
方法中的 s 与之无关。当方法执行实际返回时(例如,return 13
), the async
关键字将其解释为完成 the Task<int>
那已经建成了。
我有一个async我的博客上的介绍 http://blog.stephencleary.com/2012/02/async-and-await.html您可能会发现有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)