HttpClient.Timeout和使用WebRequestHandler超时属性有什么区别



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

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

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

另一方面,WebRequestHandler.ReadWriteTimeout被复制到HttpWebRequest,在那里它被设置在请求流ReadTimeoutWriteTimeout上。因此,这更多的是流级别的超时,最终是套接字级别的超时。

如果同时设置这两个,那么如果操作总共花费的时间超过HttpClient.Timeout,它将超时;如果从流中读取或写入的时间超过了WebRequestHandler.ReadWriteTimeout,它也将超时。尽管我不确定所引发的超时异常是否存在差异。

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

相关内容

  • 没有找到相关文章