Как мне избавиться от статического httpclient - PullRequest
0 голосов
/ 17 мая 2018

Я смотрю на реализацию HttpClient как статического для во избежание исчерпания сокета .(Если вы используете экземпляр для каждого вызова, вы в конечном итоге получаете сокет, застрявший в TIME_WAIT на 4 минуты, и если вы выполняете достаточно вызовов или имеете достаточно экземпляров приложения, работающих параллельно, у вас закончатся сокеты).Мне также известно о проблеме кэширования DNS , которую вызывает этот подход, и добавит подходящее ConnectionLeaseTimeout.

Но мой вопрос касается одного статического HttpClient, который остается.

первая ссылка показывает следующий пример кода:

private static HttpClient Client = new HttpClient();

Но, поскольку IDisposable, его следует утилизировать, когда он больше не требуется (т. Е. Во время закрытия приложения)?Хотя это может быть ненужным для чистого HttpClient, что если есть обработчик, который использует неуправляемые ресурсы?Как я мог позвонить избавиться от этого?Или, более конкретно, есть ли событие, на которое я могу подписаться, чтобы убедиться, что это происходит?

Редактировать:

Этот вопрос отличается от предложенного дубликата двумя важными способами,

  1. Этот билет запрашивается в контексте экземпляра httpclient на вызов.Указание на то, что стандартное использование не должно утилизироваться после каждого запроса, само по себе явно не соответствует тому, что предлагал мой вопрос.
  2. Фраза

Объект HttpClient предназначен для жизни какЕсли ваше приложение должно отправлять HTTP-запросы

, это означает, что после того, как вашему приложению больше не нужно отправлять HTTP-запросы, наступает время, когда удаление должно произойти.Другие вопросы и ресурсы указали, что IDisposable требуется, если у обработчика есть неуправляемые ресурсы.

На самом деле я задал этот вопрос после рассмотрения этого и нескольких других вопросов SO, чтобы убедиться, что ответа не было.Если мой вопрос дублирующий, потрясающий, я не нашел его, и, что важно, предложенный дубликат не решает эту проблему.

...