我面临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的提示,我得出以下结论:
.NET Core 3运行时
Mono运行时(Xamarin.Forms项目)
也许与此https://forums.xamarin.com/discussion/5941/system-net-http-httpclient-timeout-seems-to-be-ignored有关。
虽然还是个未解决的问题...