为什么存在async关键字

通过频道浏览9个msdn视频我发现了以下未答复的评论,并希望有人可以解释它?

我没有得到异步关键字的重点。 为什么不在方法返回Task时只允许await关键字,就像迭代器可以返回任何返回IEnumerable的方法的返回值一样。

我确信有一个很好的理由,我只想明白为什么上述建议不可行。


它主要是为了避免向后兼容性问题而引入的。 如果编译器必须推断方法的async (即通过检测await关键字),那么存在一些细微的场景,其中现有代码突然被区别对待,特别是当您有标识符(变量或函数名称叫await )。

完整的解释在这里:http://blogs.msdn.com/b/ericlippert/archive/2010/11/11/whither-async.aspx


我想也许这篇文章涵盖了推理:

http://blogs.msdn.com/b/ericlippert/archive/2010/11/11/whither-async.aspx

第一段指出:

许多人问我是什么促使设计决定要求任何包含“await”表达式的方法以上下文关键字“async”为前缀。

它得出结论:

这是很多优点和缺点; 在评估了所有这些特性之后,以及大量玩弄原型编译器以了解其感受如何,C#设计师决定对包含“await”的方法要求“异步”。 我认为这是一个合理的选择。

它的缺点是向后兼容。

进一步阅读:

http://blogs.msdn.com/b/ericlippert/archive/2010/10/29/asynchronous-programming-in-c-5-0-part-two-whence-await.aspx


对我来说,最引人注目的原因是,当函数变成async时, return语句的含义会发生变化。 没有asnyc return x表示“返回一个带有值x的任务”,而async意味着“将任务的结果设置为x

链接地址: http://www.djcxy.com/p/79311.html

上一篇: Why does the async keyword exist

下一篇: How are you taking advantage of Multicore?