繁体   English   中英

为什么异步代码处理较少的负载?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM