У меня возникла проблема с HttpClient (.NETStandard v2.1, System.Net.Http, предназначенная для монофонической среды выполнения). Я хочу установить время ожидания для HttpClient для каждого запроса, передав токен отмены в SendAsync. Он работает должным образом при использовании конструктора без параметров HttpClient, но игнорируется при передаче конструктору HttpClient экземпляра HttpClientHandler. Операция отменяется через 75 секунд.
Для иллюстрации:
public static async Task<HttpResponseMessage> Send()
{
var req = new HttpRequestMessage(HttpMethod.Get, new
Uri("someURL"));
var handler= new HttpClientHandler{CookieContainer = new
CookieContainer()};
/*var client = new HttpClient(); <--- This is working */
var client = new HttpClient(handler);
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
cts.Token.Register(() => Debug.WriteLine("TASK CANCELLED"));
return await client.SendAsync(req, cts.Token);
}
Через 5 секунд выходные данные отладки записывают «TASK CANCELED», но SendAsync продолжается в течение 75 секунд. Если я использую конструктор без параметров, SendAsync отменяется через 5 секунд.
Мне нужен HttpClientHandler, чтобы использовать свойство CookieContainer. Чего мне здесь не хватает?
РЕДАКТИРОВАТЬ
После дальнейшего изучения и подсказок @Lasse Vågsæther Karlsen я выяснил следующее:
.NET Core 3 время выполнения
- Если URL-адрес недоступен или интернет-соединение не работает, HttpClient выдает HttpRequestException через 3 секунды
- В противном случае он отменяется, как ожидается, через 5 секунд
Mono runtime (проект Xamarin.Forms)
- Если URL-адрес недоступен или интернет-соединение не работает, HttpClient выдает исключение OperationCanceledException через 75 секунд
- В противном случае он отменяется, как и ожидалось, через 5 секунд
Возможно, это связано с этим https://forums.xamarin.com/discussion/5941/system-net-http-httpclient-timeout-seems-to-be-ignored.
Все еще открытопроблема хотя ...