Повторное использование 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;