关于c#:HttpClient.Timeout和使用WebRequestHandler超时属性之间有什么区别?

Whats the difference between HttpClient.Timeout and using the WebRequestHandler timeout properties?

我可以直接使用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以在请求超时之前等待。

在这里,WebRequestHandlerHTTPClient的包装
WebRequestHandler派生自HttpClientHandler,但添加了通常仅在完整.NET上可用的属性。
总而言之,更多的是更少的事情。

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