提问人:Maxim Gershkovich 提问时间:2/10/2012 最后编辑:Maxim Gershkovich 更新时间:7/26/2023 访问量:3836
为什么存在 async 关键字
Why does the async keyword exist
问:
浏览第 9 频道 msdn 视频时,我发现了以下未回答的评论,并希望有人可以解释一下?
我不明白 async 关键字的意义。为什么不直接允许 await 关键字,只要该方法返回 Task,就像迭代器一样 可以在返回 IEnumerable 的任何方法上生成 Return。
我相信有一个很好的理由,我只是想了解为什么上述建议是不可能的。
答:
我想也许这篇文章涵盖了推理:
https://learn.microsoft.com/en-us/archive/blogs/ericlippert/asynchrony-in-c-5-part-six-whither-async
第一段指出:
很多人问我,是什么促使我做出设计决定 要求任何包含“await”表达式的方法都带有前缀 替换为 contextual 关键字“async”。
它的结论是:
这有很多优点和缺点;在评估了所有这些之后,以及 大量尝试原型编译器,看看它的感觉如何, C# 设计者决定要求在一种方法上“异步”,该方法 包含“await”。我认为这是一个合理的选择。
它的缺点是向后兼容性。
延伸阅读:
https://learn.microsoft.com/en-us/archive/blogs/ericlippert/asynchrony-in-c-5-part-one
评论
引入它主要是为了避免向后兼容性问题。如果编译器必须推断方法的 -ness(这将通过检测关键字),那么在一些微妙的情况下,现有代码会突然被区别对待,特别是当你有标识符(调用变量或函数名称)时。async
await
await
完整的解释在这里:https://learn.microsoft.com/en-us/archive/blogs/ericlippert/asynchrony-in-c-5-part-six-whither-async
评论
对我来说,最令人信服的原因是,当一个函数变为 .Without 表示“返回一个值为 ”的任务,而 async 表示“将任务的结果设置为 。return
async
asnyc
return x
x
x
不久前,我在我的博客上写了一篇关于 async/await 关键字问题的摘要。
以下是“推断”部分的结论:async
埃里克·利珀特 (Eric Lippert) 有关于该主题的权威文章。博客评论、Channel9 和论坛中也对此进行了讨论。
总而言之,一个单字关键词的重大变化太大了。选择是多词 await(例如,)或方法上的关键字 (),该关键字将在该方法中启用关键字。显式标记方法对人类和计算机来说都更容易解析,因此他们决定使用这对方法。
await
await for
async
await
async
async/await
评论