【发布时间】:2016-12-06 03:28:46
【问题描述】:
我创建了一个带有两个控制器的 .Net Web Api,它们执行相同的操作(故意非常慢的网络调用)。一种是同步的,一种是异步的。你可以在这里找到代码: https://github.com/jkruer01/SyncVsAsync
这两个控制器之间的重要区别在于这行带有 WebClient 的单行代码:
同步
var content = client.DownloadString(url);
异步
var content = await client.DownloadStringTaskAsync(url);
相当基本的东西......
然后我创建了一个控制台应用程序,它可以同时向同步或异步控制器发出 50 个请求。我希望异步控制器能够同时完成更多的请求,但我发现事实恰恰相反。同步控制器成功完成了大约 50 次中的 25 次。异步控制器仅成功完成了大约 50 次中的 10 次。
这是为什么?我认为异步代码的目的是它可以处理更多的并发请求。
我被难住了。
【问题讨论】:
-
可能限制在“服务器”上,它无法同时处理多个请求,导致速度变慢?
-
请在此处发布您的代码的相关部分。你要求人们搜索你的代码是不公平的。将问题缩小到特定区域,然后将其粘贴到此处。
-
我很困惑。在问题的标题中,您正在谈论速度,而在正文中,您正在谈论成功/失败的区别。您可以将代码的相关部分粘贴到一些 cmets 和结果中吗?
-
我更新了我的问题以包含特定的代码差异。
-
您没有添加正确数量的代码。具体来说,您在循环中使用 await 。这意味着您永远不会有两个同时请求 - “等待”意味着停止当前函数的执行,直到等待准备就绪。因此,循环的每次迭代都必须完成,然后函数才能恢复并进行另一次迭代。它是异步的,但仍以完全串行的方式发生。
标签: c# .net asynchronous async-await