我今天使用了异步方法,异步调用方法并使用调用者的回调方法。
最近,我可以在this post上看到使用新的await关键字来实现这一点的新方法。除了节省几行代码之外,这种新模型的主要优势是什么?
当你进行两个不同的异步调用,但希望控件在两个调用完成后只返回到调用者的回调中的一个时,它是否提供了内置的解决方案?
CTP (社区技术预览)是什么意思?这个新关键字在下一版本的C#和VB.NET中可用吗?
发布于 2010-12-21 01:38:30
摘自Eric Lippert的博客文章Asynchrony in C# 5, Part One
C# 5.0的设计者意识到编写异步代码在很多方面都是痛苦的。异步代码很难推理,正如我们已经看到的,转换为延续是复杂的,并导致代码充满了模糊代码含义的机制。
正如这篇文章所解释的,像迭代器块、匿名方法、查询理解和动态类型,其目的是让事情变得既难又容易。
至于社区技术预览位。通常,这意味着“等待”将出现在下一个版本的C#中,但不能保证它的某些方面不会改变。因此,如果你写了一些东西(代码或博客文章),并且它的中断,不要责怪他们。
发布于 2010-12-21 02:20:14
我会说“节省几行代码”是轻描淡写的。await关键字允许编译器生成所有必要的连接,从而允许您编写一个看起来非常像常规同步方法的异步方法。
当前使用回调的范例有许多局限性,例如无法使用某些语言构造、复杂的错误处理等。所有这些复杂性都被编译器生成的代码有效地隐藏了。
Async CTP附带了几个Word文档,这些文档的细节要详细得多。如果您还没有看过它们,我建议您这样做。“.NET.docx中的异步”文档中有一个非常详细的示例,它展示了编译器生成的代码的扩展。
发布于 2010-12-21 01:42:47
如果你想在异步操作完成后开始一个新的任务,你不需要"await“关键字。您所需要的就是Task.ContinueWhenAll方法。
关于CTP -这意味着这是在"alpha“阶段,可能包含错误,还没有完成(可能会在未来发生变化。例如,"await“关键字将更改为其他关键字,或者将具有不同的语法规则)。
https://stackoverflow.com/questions/4491467
复制相似问题