我今天使用异步方法,异步调用方法并使用调用者的回调方法。
最近,我可以通过this post讨论使用新await
关键字执行此操作的新方法。除了节省几行代码之外,这款新机型的主要优势是什么?
它是否提供了一个内置的解决方案,用于何时进行两次不同的异步调用,但希望控件在两次完成后都只返回一个调用者的回调?
CTP(社区技术预览版)是什么意思?这个新关键字是否在下一版本的C#和VB.NET中可用?
答案 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”关键字将更改为其他内容,或者将具有不同的语法规则)