Что PooledConnectionLifetime в HttpClient будет делать с существующим соединением? ⇐ C#

Место общения программистов C#
Anonymous
Что PooledConnectionLifetime в HttpClient будет делать с существующим соединением?

Сообщение Anonymous »

допустим, мы используем HttpClient для выполнения запроса и устанавливаем для PooledConnectionLifetime значение 5 секунд, как

Код: Выделить всё

// C# pseudo code, not in the right format

var socketsHandler = new SocketsHttpHandler
{
PooledConnectionLifetime = TimeSpan.FromSeconds(5)  // just for demo purpose
};
public static client = new HttpClient(socketsHandler); // we use a single static `HttpClient`

// takes 3 seconds to finish a request as the server is slow
client.GetAsync("https://www.slowwebsite.com");  // create a TCP connection and put this connection in a pool

// after 3 seconds , send another request
client.GetAsync("https://www.slowwebsite.com");  // re-use the TCP connection
поэтому после первого запроса TCP-соединение устанавливается и помещается в пул, а когда мы выдаем второй запрос, оно может повторно использовать TCP-соединение.
но через 5-ю секунду TCP-соединение должно быть закрыто, поскольку для PooledConnectionLifetime установлено значение 5 секунд.
Мой вопрос: закроется ли TCP-соединение немедленно (перейдет в состояние TIME_WAIT) )? если оно закрывается немедленно, разве второй запрос не будет прерван и остановлен?
Если TCP-соединение не будет закрыто немедленно и дождется завершения второго запроса, тогда соединение будет закрыто. закрыто, не так ли это делает IHttpClientFactory:

Код: Выделить всё

builder.Services.AddHttpClient("typicode", c =>
{
c.BaseAddress = new Uri("https://www.slowwebsite.com/");
})
.SetHandlerLifetime(TimeSpan.FromSeconds(5));
но согласно этой статье, сценарий 5: используйте IHttpClientFactory https://www.mytechramblings.com/posts/d ... the%20pool.

TCP-соединение было закрыто сразу по истечении времени, установленного параметром PooledConnectionLifetime. Срок действия атрибута истек, истечение срока действия обработчика не приведет к немедленному удалению TCP-соединения. Обработчик с истекшим сроком действия (управляемый SetHandlerLifetime) будет помещен в отдельный пул, который периодически обрабатывается для удаления обработчиков только тогда, когда они становятся недоступными.

Это похоже, что в моем примере HttpClient второй запрос будет прерван и остановлен?

Подробнее здесь: https://stackoverflow.com/questions/783 ... connection

Вернуться в «C#»