为什么存在async关键字
本文关键字:关键字 async 存在 为什么 | 更新日期: 2023-09-27 18:23:56
浏览第9频道msdn视频时,我发现以下未回答的评论,希望有人能解释一下?
我不明白async关键字的意思。为什么不允许只要方法返回Task,就可以使用wait关键字,就像迭代器一样可以对任何返回IEnumerable的方法产生回报。
我相信有充分的理由,我只是想了解为什么上述建议不可能。
引入它主要是为了避免向后兼容性问题。如果一个方法的async
性质必须由编译器推断(即通过检测await
关键字),那么在某些微妙的情况下,现有代码会突然被不同对待,尤其是当您有标识符(称为await
的变量或函数名)时。
完整的解释如下:https://learn.microsoft.com/en-us/archive/blogs/ericlippert/asynchrony-in-c-5-part-six-whither-async
我认为这篇文章可能涵盖了推理:
https://learn.microsoft.com/en-us/archive/blogs/ericlippert/asynchrony-in-c-5-part-six-whither-async
第一段指出:
很多人问我是什么促使我做出设计决定要求任何包含";等待";要加前缀的表达式其中上下文关键字";异步";。
其结论是:
这有很多优点和缺点;在评估了所有这些之后,以及玩了很多原型编译器来看看它的感觉,C#设计者决定要求";异步;关于一种方法包含一个";等待";。我认为这是一个合理的选择。
简而言之就是向后兼容性。
进一步阅读:
https://learn.microsoft.com/en-us/archive/blogs/ericlippert/asynchrony-in-c-5-part-one
对我来说,最令人信服的原因是当函数变成async
时,return
语句的含义会发生变化。如果没有asnyc
,return x
表示"返回值为x
的任务",如果有async,则表示"将任务的结果设置为x
。
不久前,我在博客上写了一篇关于async/await关键字问题的摘要。
以下是";推断CCD_ 10":
埃里克·利珀特在这个问题上具有权威性。博客评论、频道9和论坛也讨论过这一点。
总之,一个单词
await
关键字的突破性变化太大了。选择是在多字等待(例如,await for
)或方法上的关键字(async
)之间,该关键字将在该方法内启用await
关键字。显式标记方法async
对人类和计算机来说都更容易解析,所以他们决定使用async/await
对。