asynchronous - 使用“Async”时,为什么使用“Await”
问题描述
我们使用术语“异步”来允许码流继续而不阻塞主流。还行吧。我们希望主流继续存在,而无需等待该过程完成。但通常,“Async 和 Await”是一起使用的。
我的问题是;当我们添加“await”时,我们期望码流中有“Async”状态。在这种情况下,我不明白使用“异步”有什么好处?谁能解释一下,谢谢,干得好。
解决方案
目前尚不清楚您指的是哪种技术。我假设您指的是过去几年添加到许多语言中的async
和关键字。await
在这种情况下,这种说法实际上是不正确的:
我们使用术语“异步”来允许码流继续而不阻塞主流。
在 C#、JavaScript、Python、F# 和 Visual Basic 中,async
关键字不会异步执行。它有两个作用:
await
在该方法/lambda 中启用关键字。- 将该方法/lambda 转换为状态机。
所以async
并不意味着“在后台线程上运行此代码”或类似的东西,这是一个常见但不正确的假设。
上面的第一点对于向后兼容很重要。这些语言中的每一种都await
用作上下文关键字,因此程序中的文本“await”只有在标有 的方法中才是关键字async
。这允许语言在不破坏任何现有代码(例如,用作await
变量名的某人的代码)的情况下引入新关键字。
请参阅我的这篇文章,其中收集了很多关于关键字的讨论,因为它们最初是为 C#/VB 设计的。当他们采用关键字时,这些相同的设计决策几乎完全适用于其他语言。从该帖子链接的资源之一是Eric Lippert 的帖子,其中介绍了为什么async
除了关键字之外我们还需要await
关键字。
推荐阅读
- python - 如何在内存中保存文件数量并将它们传递给python中的多处理?
- python - Keras 无法在回调中计算图形节点
- android - 如何在 pjsip 中停止刷新注册
- java - 如何在每个在不同线程中运行的多个 testng xml 文件之间传递值
- excel - 匹配Excel中四列中一行中的比较值
- html - HTML5 自动播放视频根据导航条件播放和失败
- c# - 如何释放不在列表视图“视野”中的图像控件的内存
- reactjs - 带有 REDUX 错误的 REACT 16 (cdn)
- html - 为什么`min-height`会影响flex布局中div的高度?
- glsl - Buggy 纹理坐标映射