为什么异步关键字存在

问题描述 投票:39回答:4

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

我不明白async关键字的意思。为什么不只允许每当方法返回Task时,就使用await关键字,就像迭代器一样可以在任何返回IEnumerable的方法上产生收益。

我确定有充分的理由,我只是想了解为什么以上建议无法实现。

c# .net asynchronous async-ctp
4个回答
22
投票

引入它主要是为了避免向后兼容问题。如果必须由编译器推断方法的async性质(这是通过检测await关键字得出的),那么在某些微妙的情况下,现有代码将突然被不同地对待,特别是当您具有标识符时(变量或函数名await)。

完整的解释在这里:https://docs.microsoft.com/en-us/archive/blogs/ericlippert/asynchrony-in-c-5-part-six-whither-async


15
投票

我认为这篇文章可能涵盖了原因:

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

第一段指出:

许多人问我是什么促使设计决策需要任何包含“ await”表达式的方法作为前缀使用上下文关键字“异步”。

结论:

这有很多优点和缺点;在评估了所有这些因素之后,以及尝试了许多原型编译器以了解它的感觉,C#设计人员决定在一种方法上要求“异步”包含一个“等待”。我认为这是一个合理的选择。

它的缺点是向后兼容。

进一步阅读:

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


9
投票

对我来说,最令人信服的原因是return语句的含义在函数变为async时发生变化。如果不使用asnyc,则return x表示“返回值x的任务”,而使用异步则表示“将任务的结果设置为x


2
投票

我不久前在自己的博客上写了一个summary of async/await keyword questions

这是“推断async”部分的结论:

埃里克·利珀特(Eric Lippert)在被摄体上具有definitive post。在blog commentsChannel9forums中也进行了讨论。

总而言之,单字await关键字将是一个重大突破。选择是在多字等待(例如await for)还是方法中的关键字(async)之间进行选择,该关键字将在该方法内启用await关键字。显式标记方法async对于人类和计算机来说都比较容易解析,因此他们决定使用async/await对。

© www.soinside.com 2019 - 2024. All rights reserved.