通过该频道浏览了9个msdn视频,我发现了以下未答复的评论,希望有人可以对此进行解释?
我不明白async关键字的意思。为什么不只允许每当方法返回Task时,就使用await关键字,就像迭代器一样可以在任何返回IEnumerable的方法上产生收益。
我确定有充分的理由,我只是想了解为什么以上建议无法实现。
引入它主要是为了避免向后兼容问题。如果必须由编译器推断方法的async
性质(这是通过检测await
关键字得出的),那么在某些微妙的情况下,现有代码将突然被不同地对待,特别是当您具有标识符时(变量或函数名await
)。
完整的解释在这里:https://docs.microsoft.com/en-us/archive/blogs/ericlippert/asynchrony-in-c-5-part-six-whither-async
我认为这篇文章可能涵盖了原因:
http://blogs.msdn.com/b/ericlippert/archive/2010/11/11/whither-async.aspx
第一段指出:
许多人问我是什么促使设计决策需要任何包含“ await”表达式的方法作为前缀使用上下文关键字“异步”。
结论:
这有很多优点和缺点;在评估了所有这些因素之后,以及尝试了许多原型编译器以了解它的感觉,C#设计人员决定在一种方法上要求“异步”包含一个“等待”。我认为这是一个合理的选择。
它的缺点是向后兼容。
进一步阅读:
对我来说,最令人信服的原因是return
语句的含义在函数变为async
时发生变化。如果不使用asnyc
,则return x
表示“返回值x
的任务”,而使用异步则表示“将任务的结果设置为x
。
我不久前在自己的博客上写了一个summary of async/await keyword questions。
这是“推断async
”部分的结论:
埃里克·利珀特(Eric Lippert)在被摄体上具有definitive post。在blog comments,Channel9和forums中也进行了讨论。
总而言之,单字
await
关键字将是一个重大突破。选择是在多字等待(例如await for
)还是方法中的关键字(async
)之间进行选择,该关键字将在该方法内启用await
关键字。显式标记方法async
对于人类和计算机来说都比较容易解析,因此他们决定使用async/await
对。