Выбор ответа Middle ASP.NET Core спрашивают часто обновлено
Почему не new HttpClient на каждый запрос
Вопрос
Что плохого в using var client = new HttpClient(); внутри каждого обработчика?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Каждый экземпляр держит свои соединения, и под нагрузкой заканчиваются порты. Каждый новый HttpClient создаёт свой обработчик с пулом соединений.
Варианты ответа
- Каждый экземпляр держит свои соединения, и под нагрузкой заканчиваются портыправильный ответ
HttpClientнельзя освобождать черезusing:Disposeбросит исключениеHttpClientпотокобезопасен только при создании в каждом запросе заново- Ничего плохого: это рекомендуемый способ, соединения переиспользуются
Разбор
Каждый новый HttpClient создаёт свой обработчик с пулом соединений. После Dispose сокеты висят в TIME_WAIT, и при высокой частоте запросов наступает исчерпание портов. Рекомендации: IHttpClientFactory (AddHttpClient, типизированные клиенты) или один долгоживущий HttpClient с SocketsHttpHandler и PooledConnectionLifetime, чтобы учитывать смену DNS. Сам HttpClient потокобезопасен для отправки запросов.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.