【发布时间】:2021-05-20 14:47:52
【问题描述】:
我正在尝试了解异步编程并遇到了 async/await 关键字。我一直在理解 async/await 关键字的使用。我实际上查看了两种编程语言,JavaScript 和 C#,发现这两种语言在使用 async/await 关键字方面存在很大差异。
对于 JavaScript,它说:
Async/await 使您的代码看起来是同步的,并且在某种程度上它使其行为更加同步。 await 关键字会阻止执行它之后的所有代码,直到 promise 完成,就像它使用同步操作一样。
所以说 async/await 会使执行同步。
对于 C#,它说:
async 关键字将方法转换为 async 方法,这允许您在其主体中使用 await 关键字。 应用 await 关键字时,它会暂停调用方法并将控制权交还给调用者,直到等待的任务完成。
所以,据说使用 async/await 会使代码执行异步。
我想问一下,在JavaScript和C#中使用async/await关键字真的有区别吗?
或者,
上述陈述中是否缺少某些内容?
【问题讨论】:
-
So, its saying that async/await will make the execution synchronous.这不是它所说的。它说它使代码 look 同步。 -
如果您在字里行间阅读,您会发现它们都在说同样的事情。 "await 关键字阻止执行它后面的所有代码,直到 promise 完成" 与 "当应用 await 关键字时,它暂停调用方法并产生控制权。返回其调用者,直到等待的任务完成。”
-
await不会阻塞线程。与此同时,其他操作仍然可以在其他地方发生(例如setInterval)。但是,below 行 await 将在 await 完成后执行。它不会使异步操作同步,它只是解决 Promises 回调地狱的一些很棒的语法糖。 -
async/await 在 C# 和 JavaScript 中的行为类似。事实上,C#
Task和 JavaScriptPromise在思想上是相似的。它们如何利用资源(线程)进行异步/等待操作(因为 C# 是多线程的,而 JS 是单线程的)以及对操作的控制(例如延迟启动、停止等)等其他差异,存在一些差异。但是,从编码/工程的角度来看,它们提供了相同的体验。 -
在 JavaScript 中它说,
The await keyword blocks execution of all the code that follows it until the promise fulfills, exactly as it would with a synchronous operation。与 C# 中的相反,When the await keyword is applied, it suspends the calling method and yields control back to its caller until the awaited task is complete.
标签: javascript c# asynchronous async-await