什么是HttpClient.Timeout和使用WebRequestHandler超时属性之间的区别?

时间:2014-10-11 09:31:27

标签: c# .net vb.net timeout dotnet-httpclient

我可以直接使用HttpClient设置HttpClient.Timeout对象的超时时间,但我最近阅读的是WebRequestHandler类,它是HttpClientHandler的衍生物。

WebRequestHandler具有ReadWriteTimeout属性。当与HttpClient.Timeout一起使用时,这将如何影响请求的操作?

2 个答案:

答案 0 :(得分:22)

当您执行SendAsync HttpClient.Timeout放置在CancellationTokenSource时。这意味着此超时适用于整个异步操作。

另一方面,WebRequestHandler.ReadWriteTimeout被复制到HttpWebRequestReadTimeout位于请求流WriteTimeoutHttpClient.Timeout上。所以这更像是流级别的超时,最终是套接字级超时。

如果同时设置两者,那么如果操作总共超过WebRequestHandler.ReadWriteTimeout,它将超时,如果流的读取或写入时间超过{{1}},它也将超时。虽然我不确定引发的超时异常是否存在差异。

答案 1 :(得分:1)

WebRequestHandler.ReadWriteTimeout - 获取或设置向服务器写入请求或从服务器读取响应时的超时(以毫秒为单位)。

HttpClient.Timeout - 获取或设置在请求超时之前要等待的TimeSpan

此处WebRequestHandlerHTTPClient的包装器 WebRequestHandler派生自HttpClientHandler,但添加的属性通常仅在完整的.NET上可用。 总而言之,它更像是一回事。

有关详细信息,请参阅此链接 - http://blogs.msdn.com/b/henrikn/archive/2012/08/07/httpclient-httpclienthandler-and-httpwebrequesthandler.aspx