Выбор ответа Middle ASP.NET Core спрашивают часто обновлено

Почему не new HttpClient на каждый запрос

Вопрос

Что плохого в using var client = new HttpClient(); внутри каждого обработчика?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Каждый экземпляр держит свои соединения, и под нагрузкой заканчиваются порты. Каждый новый HttpClient создаёт свой обработчик с пулом соединений.

Варианты ответа

  1. Каждый экземпляр держит свои соединения, и под нагрузкой заканчиваются портыправильный ответ
  2. HttpClient нельзя освобождать через using: Dispose бросит исключение
  3. HttpClient потокобезопасен только при создании в каждом запросе заново
  4. Ничего плохого: это рекомендуемый способ, соединения переиспользуются

Разбор

Каждый новый HttpClient создаёт свой обработчик с пулом соединений. После Dispose сокеты висят в TIME_WAIT, и при высокой частоте запросов наступает исчерпание портов. Рекомендации: IHttpClientFactory (AddHttpClient, типизированные клиенты) или один долгоживущий HttpClient с SocketsHttpHandler и PooledConnectionLifetime, чтобы учитывать смену DNS. Сам HttpClient потокобезопасен для отправки запросов.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.