什么是HttpClient.Timeout和使用WebRequestHandler超时属性之间的区别?
我可以直接用HttpClient.Timeout
设置我的HttpClient
对象的超时,但我最近读到了WebRequestHandler
类,它是HttpClientHandler
的衍生物。
WebRequestHandler
具有ReadWriteTimeout
属性。 当与HttpClient.Timeout
一起使用时,这将如何影响请求的操作?
当您执行SendAsync
, HttpClient.Timeout
被放置在CancellationTokenSource
。 这意味着此超时适用于整个异步操作。
另一方面, WebRequestHandler.ReadWriteTimeout
被复制到HttpWebRequest
,它在请求流上设置ReadTimeout
和WriteTimeout
。 所以这更像是流级别的超时,最终是套接字级超时。
如果同时设置两者,那么如果操作总共超过HttpClient.Timeout
将超时,并且如果来自流的读取或写入花费的时间比WebRequestHandler.ReadWriteTimeout
长,则它也将超时。 虽然我不确定引发的超时exception是否存在差异。
WebRequestHandler.ReadWriteTimeout
– 获取或设置向服务器写入请求或从服务器读取响应时的超时(以毫秒为单位)。
HttpClient.Timeout
– 获取或设置在请求超时之前要等待的TimeSpan
。
这里, WebRequestHandler
是HTTPClient
的包装器, WebRequestHandler
派生自HttpClientHandler
但添加的属性通常只在完整的.NET上可用。 总而言之,它更不是一回事。
有关更多信息,请参阅此链接 – http://blogs.msdn.com/b/henrikn/archive/2012/08/07/httpclient-httpclienthandler-and-httpwebrequesthandler.aspx