我可以直接用HttpClient.Timeout
设置我的HttpClient
对象的超时时间,但我最近读了WebRequestHandler
类,它是HttpClientHandler
的派生类。HttpClient.Timeout和使用WebRequestHandler超时属性有什么区别?
WebRequestHandler
有一个ReadWriteTimeout
财产。当与HttpClient.Timeout
一起使用时,这将如何影响请求的操作?
我可以直接用HttpClient.Timeout
设置我的HttpClient
对象的超时时间,但我最近读了WebRequestHandler
类,它是HttpClientHandler
的派生类。HttpClient.Timeout和使用WebRequestHandler超时属性有什么区别?
WebRequestHandler
有一个ReadWriteTimeout
财产。当与HttpClient.Timeout
一起使用时,这将如何影响请求的操作?
当您执行SendAsync
的HttpClient.Timeout
被放置在CancellationTokenSource
。这意味着这个超时是针对整个异步操作的。
在另一方面,WebRequestHandler.ReadWriteTimeout
被复制到其上请求流既ReadTimeout
和WriteTimeout
设置HttpWebRequest
。所以这更多的是在流级别的超时,这最终是套接字级超时。
如果您同时设置了这两项,那么如果操作总共需要超过HttpClient.Timeout
,则它将超时,并且如果从流中读取或写入的时间超过WebRequestHandler.ReadWriteTimeout
,则它也会超时。虽然我不确定提出的超时异常是否有区别。
System.Net.HttpClient可以设置超时属性如上
var client = new HttpClient();
client.Timeout.Add(new TimeSpan(1,0,0));
OP询问两件事之间有什么'差异',而不是如何使用。 – 2014-10-11 09:46:02
对不起,我误读了你的提问... – 2014-10-11 10:11:41
对不起,我误解了你的要求......两者几乎相同,但WebRequestHandler可以设置其他参数,HttpClient.Timeout比WebRequestHandler稍快 – 2014-10-11 10:23:35
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
由于它涉及到流,所以'ReadWriteTimeout '那么影响'Response.Content.ReadAsStringAsync'呢?目前我在调用'SendAsync'时使用'HttpCompletionOption.ResponseContentRead'来确保在超时之前读取内容,因为'ReadAsStringAsync'不允许显式超时或取消。如果'WebRequestHandler'允许我在读取内容流时设置超时,那么我想使用'HttpCompletionOption.ResponseHeadersRead'。 – iguanaman 2014-10-11 10:18:37
从描述中描绘你的用例有点难,你能通过编辑问题发布相关的代码吗? – weston 2014-10-11 18:35:51