使用关键字'await'进行异步调用

3
我今天使用了异步方法,以异步方式调用方法并使用调用者的回调方法。
最近,我看到了这篇文章,介绍了一种使用新的await关键字进行操作的新方法。除了节省几行代码之外,这种新模式的主要优点是什么?
它是否提供了内置解决方案,使您可以进行两个不同的异步调用,但希望在两者都完成后仅将控制权返回给一个调用者的回调?
CTP(社区技术预览版)是什么意思?这个新关键字是否在C#和VB.NET的下一个版本中可用?
3个回答

4

来自Eric Lippert博客文章《C# 5异步编程,第一部分》

C# 5.0的设计者们意识到编写异步代码非常痛苦,以许多方式。异步代码很难理解,正如我们所看到的,转换为继续操作是复杂的,并导致代码充满了模糊代码含义的机制。

正如本文所解释的迭代器块、匿名方法、查询推导和动态类型,目的是使难以编写的东西变得容易。

至于社区技术预览版,通常意味着“await”将在下一个版本的C#中,但不能保证其中的某些内容不会更改。因此,如果您编写了一些东西(代码或博客文章)并且它出现故障,请不要责怪他们。


3
我认为“节省几行代码”是一个轻描淡写的说法。 await 关键字允许编译器生成所有必要的连接,使您能够编写异步方法,看起来非常像常规同步方法。
使用回调的当前范例有许多限制,例如无法使用某些语言结构,复杂的错误处理等等。所有这些复杂性都被编译器生成的代码有效地隐藏了起来。
Async CTP附带了一些Word文档,详细介绍了更多内容。如果您还没有查看它们,我建议您这样做。 "Asynchrony in .NET.docx" 文档有一个非常详细的示例,展示了编译器生成的代码的范围。

1
如果您想在异步操作完成后启动新任务,则不需要使用 "await" 关键字。您只需要使用 Task.ContinueWhenAll 方法即可。
关于 CTP - 这意味着它处于 "alpha" 阶段,可能包含错误并且尚未最终确定(可能会在将来更改。例如 - "await" 关键字将更改为其他内容,或者将具有不同的语法规则)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接