2015-05-01 52 views
2

当异步/等待发出http请求时(例如使用HttpClient),默认情况下是否有内置的限制?异步/等待并发http请求的最大数量

this这样的问题意味着无限数量的连接将被打开。我的应用程序在循环中执行一批h​​ttp请求,似乎在大约50个TCP连接上保持不变。

我最初担心我需要为节流添加SemaphoreSlim,但.NET似乎为我做了这个。 任何人都可以对此有所了解吗?

+0

每个服务器有2个连接的限制。你是否连接到相同的服务器? – i3arnon

+0

是的,在这种情况下,我在批量加载场景中反复击中同一个端点。我知道Web浏览器传统上有这2个连接限制,但.NET也强制执行它?这是如何运作的? –

+1

[是](http://stackoverflow.com/q/10403944/885318)。 – i3arnon

回答

4

.Net框架中的连接存在限制。例如,这个ServicePointManagerDefaultConnectionLimit这允许你限制并发操作。

但是,我不建议将它用于节流。如果你需要控制你的请求,你应该使用SemaphoreSlim,特别是WaitAsync,因为你在async-await环境中,并且这些请求是IO绑定(并且长)。

使用SemaphoreSlim.WaitAsync意味着您不会阻塞,并且您异步等待,对于任何其他非限制机制而言都不是这种情况。此外,您不希望在能够完成操作之前开始操作。