Повторное использование HttpClient, но с другим параметром Timeout для запроса?
Чтобы повторно использовать открытые TCP-соединения с HttpClient
вам нужно предоставить один экземпляр для всех запросов.
Это означает, что мы не можем просто создать экземпляр HttpClient
с разными настройками (например, тайм-аут или заголовки).
Как мы можем совместно использовать соединения и использовать разные настройки одновременно? Это было очень просто, по сути, по умолчанию, с более HttpWebRequest
инфраструктурой HttpWebRequest
и WebClient
.
Обратите внимание, что просто настройка HttpClient.Timeout
перед выполнением запроса не является потокобезопасной и не будет работать в параллельном приложении (например, на веб-сайте ASP.NET).
Ответы
Ответ 1
Под капотом HttpClient
просто использует маркер отмены для реализации поведения тайм-аута. Вы можете сделать то же самое непосредственно, если хотите изменить его на запрос:
var cts = new CancellationTokenSource();
cts.CancelAfter(TimeSpan.FromSeconds(30));
await httpClient.GetAsync("http://www.google.com", cts.Token);
Обратите внимание, что тайм-аут по умолчанию для HttpClient
составляет 100 секунд, и запрос будет по-прежнему отменен в этот момент, даже если вы установили более высокое значение на уровне запроса. Чтобы исправить это, установите "max" тайм-аут на HttpClient
, который может быть бесконечным:
httpClient.Timeout = System.Threading.Timeout.InfiniteTimeSpan;