取消HttpClientHandler的HttpClient无法正常工作

时间:2019-10-11 10:17:13

标签: c# xamarin.forms httpclient

我面临HttpClient(.NETStandard v2.1,System.Net.Http,目标是单声道运行时)的问题。我想通过在SendAsync中传递取消令牌来为每个请求的HttpClient设置超时。当使用HttpClient的无参数构造函数时,它可以正常工作,但是当将HttpClientHandler的实例传递给HttpClient构造函数时,它将被忽略。 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 CANCELLED”,但SendAsync继续进行总共75秒。如果我使用无参数构造函数,则5秒钟后,SendAsync取消。

我需要HttpClientHandler来使用CookieContainer属性。 我在这里想念什么?

编辑

经过进一步调查和@LasseVågsætherKarlsen的提示,我得出以下结论:

  1. .NET Core 3运行时

    • 如果无法访问该网址或Internet连接断开,则HttpClient会在3秒钟后引发HttpRequestException
    • 否则,它会在5秒钟后按预期取消
  2. Mono运行时(Xamarin.Forms项目)

    • 如果网址无法访问或Internet连接断开,则HttpClient会在75秒后引发OperationCanceledException
    • 否则,它会在5秒钟后按预期取消

也许与此https://forums.xamarin.com/discussion/5941/system-net-http-httpclient-timeout-seems-to-be-ignored有关。

虽然还是个未解决的问题...

0 个答案:

没有答案