HttpClient с отменой HttpClientHandler не работает - PullRequest
3 голосов
/ 11 октября 2019

У меня возникла проблема с 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 я выяснил следующее:

  1. .NET Core 3 время выполнения

    • Если URL-адрес недоступен или интернет-соединение не работает, HttpClient выдает HttpRequestException через 3 секунды
    • В противном случае он отменяется, как ожидается, через 5 секунд
  2. Mono runtime (проект Xamarin.Forms)

    • Если URL-адрес недоступен или интернет-соединение не работает, HttpClient выдает исключение OperationCanceledException через 75 секунд
    • В противном случае он отменяется, как и ожидалось, через 5 секунд

Возможно, это связано с этим https://forums.xamarin.com/discussion/5941/system-net-http-httpclient-timeout-seems-to-be-ignored.

Все еще открытопроблема хотя ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...