首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >async+await ==同步?

async+await ==同步?
EN

Software Engineering用户
提问于 2013-01-14 16:18:53
回答 4查看 33K关注 0票数 45

偶然发现了这个关于异步web请求的帖子

撇开简单性不谈,如果在现实世界中,您所做的只是发出一个异步请求并在下一行中等待它,这不等于在一开始进行同步调用吗?

EN

回答 4

Software Engineering用户

回答已采纳

发布于 2013-01-14 16:43:24

不,async + await != sync,因为继续

来自MSDN C#和Visual(异步和等待异步编程)

异步方法的目的是非阻塞操作.在等待任务运行时,异步方法中的等待表达式不会阻塞当前线程。相反,表达式将方法的其余部分签名为延续,并将控件返回给异步方法的调用方。

例如,异步执行不会阻塞UI线程,Some TextBox.Text将在下载完成后更新。

代码语言:javascript
复制
private async void OnButtonClick()
{
   SomeTextBox.Text = await new WebClient().DownloadStringTaskAsync("http://stackoverflow.com/");
}
票数 48
EN

Software Engineering用户

发布于 2013-01-14 16:31:59

不不一样。

您的async代码块正在等待await调用的返回,但是应用程序的其他部分没有等待,仍然可以像正常一样继续。

相反,同步调用会使整个应用程序或线程等到代码执行完毕才继续执行其他任何操作。

票数 11
EN

Software Engineering用户

发布于 2014-09-13 11:37:29

请允许我澄清有关异步/等待的事情。

当遇到等待时,底层状态机允许立即返回控制。然后,当等待的调用完成时,底层状态机允许在等待的调用之后在行上恢复执行。

因此,异步块不会被阻塞,也不会等待等待调用完成;当遇到等待命令时,将立即返回Control。

底层状态机是异步/等待的使用背后的“魔力”的一部分,它不会被废弃和错过。

票数 7
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/183576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档