我创建了一个.Net Web Api,它有两个执行相同操作的控制器(故意非常慢的网络调用)。一个是同步的,一个是异步的。你可以在这里找到代码: https://github.com/jkruer01/SyncVsAsync
2个控制器之间的重要区别在于这一行代码与WebClient:
同步
var content = client.DownloadString(url);
异步
var content = await client.DownloadStringTaskAsync(url);
非常基本的东西......
然后我创建了一个控制台应用程序,同时向同步或异步控制器发出50个请求。我希望异步控制器能够完成更多的同步请求,但我发现完全正好相反。同步控制器成功完成了大约25个中的25个。异步控制器仅成功完成了大约10个中的10个。
这是为什么?我认为异步代码的目的是它可以处理更多的同步请求。
我很难过。
答案 0 :(得分:3)
http请求存在问题,默认情况下,您有两个并发呼叫限制,这就是为什么需要更长时间,请参阅以下文档:
http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit.aspx https://msdn.microsoft.com/en-us/library/system.net.servicepoint.aspx
还有:Trying to run multiple HTTP requests in parallel, but being limited by Windows (registry)
尝试更改该值:)
答案 1 :(得分:1)
我解决了这个问题。事实证明我是从Visual Studio运行代码的事实。即使我在“发布”模式下运行它,它正在做一些改变行为的事情(我不知道是什么)。我“发布”了代码,然后在Visual Studio之外运行它,它完全按照我的预期运行。感谢所有的帮助和建议!