[英]Why does the Async Code Handle Less Load?
我创建了一个具有两个控制器的.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个。
为什么是这样? 我认为异步代码的目的是可以处理更多同时请求。
我很沮丧
问题在于http请求,默认情况下,您有两个并发调用的限制,这就是为什么它花费更长的时间的原因,请参见以下文档:
http://msdn.microsoft.com/zh-CN/library/system.net.servicepointmanager.defaultconnectionlimit.aspx https://msdn.microsoft.com/en-us/library/system.net.servicepoint.aspx
而且这也是: 尝试并行运行多个HTTP请求,但受到Windows(注册表)的限制
尝试更改该值:)
我解决了问题。 问题出在我是从Visual Studio运行代码的事实。 即使我以“发布”模式运行它,它也在做一些改变行为的事情(我不知道是什么)。 我“发布”了代码,然后将其运行在Visual Studio之外,并且运行的完全符合我的预期。 感谢您的所有帮助和建议!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.