首页 > 解决方案 > 使用“Async”时,为什么使用“Await”

问题描述

我们使用术语“异步”来允许码流继续而不阻塞主流。还行吧。我们希望主流继续存在,而无需等待该过程完成。但通常,“Async 和 Await”是一起使用的。

我的问题是;当我们添加“await”时,我们期望码流中有“Async”状态。在这种情况下,我不明白使用“异步”有什么好处?谁能解释一下,谢谢,干得好。

标签: asynchronousandroid-asynctaskasync-awaitsynchronization

解决方案


目前尚不清楚您指的是哪种技术。我假设您指的是过去几年添加到许多语言中的async和关键字。await

在这种情况下,这种说法实际上是不正确的:

我们使用术语“异步”来允许码流继续而不阻塞主流。

在 C#、JavaScript、Python、F# 和 Visual Basic 中,async关键字不会异步执行。它有两个作用:

  1. await在该方法/lambda 中启用关键字。
  2. 将该方法/lambda 转换为状态机。

所以async并不意味着“在后台线程上运行此代码”或类似的东西,这是一个常见但不正确的假设。

上面的第一点对于向后兼容很重要。这些语言中的每一种都await用作上下文关键字,因此程序中的文本“await”只有在标有 的方法中才是关键字async。这允许语言在不破坏任何现有代码(例如,用作await变量名的某人的代码)的情况下引入新关键字。

请参阅我的这篇文章,其中收集了很多关于关键字的讨论,因为它们最初是为 C#/VB 设计的。当他们采用关键字时,这些相同的设计决策几乎完全适用于其他语言。从该帖子链接的资源之一是Eric Lippert 的帖子,其中介绍了为什么async除了关键字之外我们还需要await关键字。


推荐阅读