Я пытаюсь установить тайм-аут по умолчанию для моих вызовов HttpClient на 5 секунд.
Я сделал это через CancellationTokenSource
.
Вот подходящий фрагмент кода:
var cancellationToken = new CancellationTokenSource();
cancellationToken.CancelAfter(TimeSpan.FromSeconds(5));
var result = _httpClient.SendAsync(request, cancellationToken.Token);
Работает так, как я ожидал, с точки зрения вызывающего кода, получающего ошибку «Задача была отменена» (я тестировал в консольном приложении .NET 4.7), но я заметил в Fiddler, что запрос все еще выполнялся в течение 1 минуты, пока он, наконец, не сдался:
Может кто-нибудь объяснить такое поведение?
Я ожидаю, что базовый запрос также будет отменен при срабатывании отмены.
_httpClient
создается как new HttpClient { BaseAddress = baseAddress }
Я знаю, что есть параметр Timeout
, но не уверен, следует ли мне использовать его или токены отмены? Я предполагаю, что Timeout
предназначен для случаев, не связанных с async / await?
Keep-Alive
. Кстати, вы можете установитьKeep-Alive
в false в HTTP-клиенте (по умолчанию - true, я уверен, по уважительной причине) - person RPM1984   schedule 08.08.2017