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

时间:2010-12-20 16:13:21

标签: c# asynchronous

我今天使用异步方法,异步调用方法并使用调用者的回调方法。

最近,我可以通过this post讨论使用新await关键字执行此操作的新方法。除了节省几行代码之外,这款新机型的主要优势是什么?

它是否提供了一个内置的解决方案,用于何时进行两次不同的异步调用,但希望控件在两次完成后都只返回一个调用者的回调?

CTP(社区技术预览版)是什么意思?这个新关键字是否在下一版本的C#和VB.NET中可用?

3 个答案:

答案 0 :(得分:4)

来自Eric Lippert的博客文章Asynchrony in C# 5, Part One

  

C#5.0的设计者意识到了这一点   编写异步代码很痛苦,   在很多方面。异步代码是   难以理解,正如我们所做的那样   看到了,变成了一个   延续是复杂的,并导致   代码充满了机制   模糊了代码的含义。

正如本文所解释的那样,迭代器块,匿名方法,查询理解和动态类型的目的是使事情变得困难,容易。

社区技术预览位。通常它意味着“await”将出现在C#的下一个版本中,但不能保证它的某些内容不会改变。所以,如果你写一些东西(代码或博客文章),它的休息时间不要责备它们。

答案 1 :(得分:3)

我会说“保存几行代码”是轻描淡写的。 await关键字允许编译器生成所有必要的连接,以允许您编写看起来非常像常规同步方法的异步方法。

当前使用回调的范例有许多限制,例如无法使用某些语言结构,复杂的错误处理等等。编译器生成的代码有效地隐藏了所有这些复杂性。

Async CTP附带了几个Word文档,这些文档更详细。如果你还没有看过它们,我建议你这样做。 “.NET.docx中的异步”文档有一个非常详细的示例,它显示了编译器生成的代码的扩展。

答案 2 :(得分:1)

如果要在完成异步操作时启动新任务,则不需要“await”关键字。您所需要的只是Task.ContinueWhenAll方法。

关于CTP - 这意味着它处于“alpha”阶段并且可能包含错误并且尚未最终确定(将来可能会更改。例如 - “await”关键字将更改为其他内容,或者将具有不同的语法规则)