.net core HttpClient在同时面对并发请求时做什么?

.net core HttpClient在同时面对并发请求时做什么?,.net-core,httpclient,.net Core,Httpclient,正如我们所知,在dotnetcore中以共享状态(单音)使用HttpClient是最佳实践,而不是为每个请求创建和处理它。我们这样做是为了防止端口耗尽问题。(更多信息) 我的问题是HttpClient在共享的同时面对并发请求时会做什么? 例如,假设请求A和请求B同时发送到共享HttpClient对象 我对其行为的第一个假设是,它将请求A和B保持在队列中,并将它们插入一行,然后运行A,然后运行B 我的第二个假设是,它使用两个外围端口(内部三分之二),同时对这两个端口进行应答 这些假设是否正确?

正如我们所知,在dotnetcore中以共享状态(单音)使用HttpClient是最佳实践,而不是为每个请求创建和处理它。我们这样做是为了防止端口耗尽问题。(更多信息)

我的问题是HttpClient在共享的同时面对并发请求时会做什么?

例如,假设请求A和请求B同时发送到共享HttpClient对象

  • 我对其行为的第一个假设是,它将请求A和B保持在队列中,并将它们插入一行,然后运行A,然后运行B
  • 我的第二个假设是,它使用两个外围端口(内部三分之二),同时对这两个端口进行应答

这些假设是否正确?如果没有其他想法?

可以肯定地说,你的第一个假设是错误的,第二个假设更接近事实。每个HttpClient实例管理自己的连接池,以并发执行请求,int.MaxValue是每台服务器并发连接数的默认值

这意味着HttpClient将同时执行所有请求。每次发送新请求时,它都会尝试使用与服务器的现有连接(如果未使用),否则它会打开一个新连接来执行请求

这里有一篇精彩的文章详细解释了这一点: