#.net-core #httpclient
Вопрос:
Как мы знаем, рекомендуется использовать HttpClient в общем состоянии (синглетном) в ядре Dotnet вместо того, чтобы создавать и утилизировать его для каждого запроса. Мы делаем это, чтобы предотвратить проблему исчерпания портов.(Более подробная информация здесь).
Моя проблема в том, что делает HttpClient перед лицом одновременных запросов точно в то же время, когда он используется совместно?
Например, предположим, что запрос A и запрос B отправлены в общий объект HttpClient одновременно.
- мое первое предположение о его поведении состоит в том, что он сохраняет запросы A и B в очереди, вставляет их в строку и запускает A, а затем запускает B!
- Мое второе предположение состоит в том, что он использует два периферийных порта (с 2 внутренними третьими) и отвечает на оба из них одновременно.
Верно ли какое-либо из этих предположений? Если нет никакой другой Идеи?
Ответ №1:
Можно с уверенностью сказать, что ваше первое предположение неверно, а второе предположение ближе к истине. каждый экземпляр HttpClient управляет собственным пулом подключений для одновременного выполнения запросов с значением int.MAX по умолчанию для числа одновременных подключений на сервер.
Это означает, что HttpClient будет выполнять все запросы одновременно. Каждый раз, когда вы отправляете новый запрос, он будет пытаться использовать существующее соединение с сервером (если оно не используется), в противном случае он откроет новое соединение для выполнения запроса.
Здесь есть отличная статья, подробно объясняющая это:
https://www.stevejgordon.co.uk/httpclient-connection-pooling-in-dotnet-core