2014-10-11 105 views

回答

16

当您执行SendAsyncHttpClient.Timeout被放置在CancellationTokenSource。这意味着这个超时是针对整个异步操作的。

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

如果您同时设置了这两项,那么如果操作总共需要超过HttpClient.Timeout,则它将超时,并且如果从流中读取或写入的时间超过WebRequestHandler.ReadWriteTimeout,则它也会超时。虽然我不确定提出的超时异常是否有区别。

+0

由于它涉及到流,所以'ReadWriteTimeout '那么影响'Response.Content.ReadAsStringAsync'呢?目前我在调用'SendAsync'时使用'HttpCompletionOption.ResponseContentRead'来确保在超时之前读取内容,因为'ReadAsStringAsync'不允许显式超时或取消。如果'WebRequestHandler'允许我在读取内容流时设置超时,那么我想使用'HttpCompletionOption.ResponseHeadersRead'。 – iguanaman 2014-10-11 10:18:37

+0

从描述中描绘你的用例有点难,你能通过编辑问题发布相关的代码吗? – weston 2014-10-11 18:35:51

-1

System.Net.HttpClient可以设置超时属性如上

var client = new HttpClient(); 
client.Timeout.Add(new TimeSpan(1,0,0)); 
+0

OP询问两件事之间有什么'差异',而不是如何使用。 – 2014-10-11 09:46:02

+0

对不起,我误读了你的提问... – 2014-10-11 10:11:41

+0

对不起,我误解了你的要求......两者几乎相同,但WebRequestHandler可以设置其他参数,HttpClient.Timeout比WebRequestHandler稍快 – 2014-10-11 10:23:35

1

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

相关问题