2
当异步/等待发出http请求时(例如使用HttpClient
),默认情况下是否有内置的限制?异步/等待并发http请求的最大数量
像this这样的问题意味着无限数量的连接将被打开。我的应用程序在循环中执行一批http请求,似乎在大约50个TCP连接上保持不变。
我最初担心我需要为节流添加SemaphoreSlim
,但.NET似乎为我做了这个。 任何人都可以对此有所了解吗?
当异步/等待发出http请求时(例如使用HttpClient
),默认情况下是否有内置的限制?异步/等待并发http请求的最大数量
像this这样的问题意味着无限数量的连接将被打开。我的应用程序在循环中执行一批http请求,似乎在大约50个TCP连接上保持不变。
我最初担心我需要为节流添加SemaphoreSlim
,但.NET似乎为我做了这个。 任何人都可以对此有所了解吗?
.Net框架中的连接存在限制。例如,这个ServicePointManager
有DefaultConnectionLimit
这允许你限制并发操作。
但是,我不建议将它用于节流。如果你需要控制你的请求,你应该使用SemaphoreSlim
,特别是WaitAsync
,因为你在async-await
环境中,并且这些请求是IO绑定(并且长)。
使用SemaphoreSlim.WaitAsync
意味着您不会阻塞,并且您异步等待,对于任何其他非限制机制而言都不是这种情况。此外,您不希望在能够完成操作之前开始操作。
每个服务器有2个连接的限制。你是否连接到相同的服务器? – i3arnon
是的,在这种情况下,我在批量加载场景中反复击中同一个端点。我知道Web浏览器传统上有这2个连接限制,但.NET也强制执行它?这是如何运作的? –
[是](http://stackoverflow.com/q/10403944/885318)。 – i3arnon