偶然发现了这个关于异步web请求的帖子。
撇开简单性不谈,如果在现实世界中,您所做的只是发出一个异步请求并在下一行中等待它,这不等于在一开始进行同步调用吗?
发布于 2013-01-14 16:43:24
不,async + await != sync,因为继续
来自MSDN C#和Visual(异步和等待异步编程)
异步方法的目的是非阻塞操作.在等待任务运行时,异步方法中的等待表达式不会阻塞当前线程。相反,表达式将方法的其余部分签名为延续,并将控件返回给异步方法的调用方。
例如,异步执行不会阻塞UI线程,Some TextBox.Text将在下载完成后更新。
private async void OnButtonClick()
{
SomeTextBox.Text = await new WebClient().DownloadStringTaskAsync("http://stackoverflow.com/");
}发布于 2013-01-14 16:31:59
不不一样。
您的async代码块正在等待await调用的返回,但是应用程序的其他部分没有等待,仍然可以像正常一样继续。
相反,同步调用会使整个应用程序或线程等到代码执行完毕才继续执行其他任何操作。
发布于 2014-09-13 11:37:29
请允许我澄清有关异步/等待的事情。
当遇到等待时,底层状态机允许立即返回控制。然后,当等待的调用完成时,底层状态机允许在等待的调用之后在行上恢复执行。
因此,异步块不会被阻塞,也不会等待等待调用完成;当遇到等待命令时,将立即返回Control。
底层状态机是异步/等待的使用背后的“魔力”的一部分,它不会被废弃和错过。
https://softwareengineering.stackexchange.com/questions/183576
复制相似问题