SocketsHttpHandler
SocketsHttpHandler держит пул
соединений. Клиент создают так:
new HttpClient(handler) -
один обработчик на много запросов.
Новый
HttpClient без общего
обработчика на каждый запрос
занимает сокеты. Закрытие -
Dispose.
Синтаксис
using System.Net.Http;
var handler = new SocketsHttpHandler();
using var client = new HttpClient(handler);
Пример
Давайте проверить лимит соединений на сервер по умолчанию:
using System;
using System.Net.Http;
class Program
{
static void Main()
{
var handler = new SocketsHttpHandler();
bool res = handler.MaxConnectionsPerServer
== int.MaxValue;
Console.WriteLine(res);
handler.Dispose();
}
}
Результат выполнения кода:
True
Пример
Давайте задать время жизни и простоя соединения в пуле:
using System;
using System.Net.Http;
class Program
{
static void Main()
{
var handler = new SocketsHttpHandler
{
PooledConnectionLifetime = TimeSpan.FromMinutes(2),
PooledConnectionIdleTimeout = TimeSpan.FromMinutes(1)
};
double res = handler.PooledConnectionLifetime.TotalMinutes;
Console.WriteLine(res);
Console.WriteLine(
handler.PooledConnectionIdleTimeout.TotalMinutes);
handler.Dispose();
}
}
Результат выполнения кода:
2
1
Пример
Давайте закрыть обработчик отдельно от клиента:
using System;
using System.Net.Http;
class Program
{
static void Main()
{
var handler = new SocketsHttpHandler();
using (var client = new HttpClient(handler, disposeHandler: false))
{
}
handler.Dispose();
Console.WriteLine("abcde");
}
}
Результат выполнения кода:
"abcde"
Смотрите также
-
JsonSerializer,
объект и JSON -
метод
Serialize,
запись в JSON -
IDisposable,
есть что закрыть -
метод
Dispose,
освободить ресурс