Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpClient.Timeout和使用WebRequestHandler超时属性之间有什么区别?_C#_.net_Vb.net_Timeout_Dotnet Httpclient - Fatal编程技术网

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

C# HttpClient.Timeout和使用WebRequestHandler超时属性之间有什么区别?,c#,.net,vb.net,timeout,dotnet-httpclient,C#,.net,Vb.net,Timeout,Dotnet Httpclient,我可以直接使用HttpClient.timeout设置我的HttpClient对象的超时,但是我最近读到了WebRequestHandler类,它是HttpClientHandler的派生类 WebRequestHandler具有ReadWriteTimeout属性。与HttpClient.Timeout一起使用时,这将如何影响请求的操作?WebRequestHandler.ReadWriteTimeout-在向服务器写入请求或从服务器读取响应时获取或设置以毫秒为单位的超时 HttpClient

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


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

WebRequestHandler.ReadWriteTimeout
-在向服务器写入请求或从服务器读取响应时获取或设置以毫秒为单位的超时

HttpClient.Timeout
-获取或设置请求超时前等待的
TimeSpan

这里,
WebRequestHandler
HTTPClient
WebRequestHandler
源于
HttpClientHandler
,但添加了通常仅在完整.NET上可用的属性。 总而言之,这是一件不太相同的事情


有关更多信息,请参阅此链接-

当您执行
SendAsync
时,
HttpClient.Timeout
位于
CancellationTokenSource
上。这意味着此超时用于整个异步操作

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


如果同时设置了这两个选项,则如果操作总共花费的时间超过了
HttpClient.Timeout
,则该操作将超时;如果从流读取或写入所花费的时间超过了
WebRequestHandler.ReadWriteTimeout
,则该操作也将超时。虽然我不确定引发的超时异常是否有差异。

因为它与流相关,
ReadWriteTimeout
会影响
Response.Content.ReadAsStringAsync
吗?目前,我在调用
SendAsync
时使用
HttpCompletionOption.ResponseContentRead
确保在超时之前读取内容,因为
ReadAsStringAsync
不允许显式超时或取消。如果
WebRequestHandler
允许我在读取内容流时设置超时,我想使用
HttpCompletionOption.ResponseHeadersRead
来代替。从描述中描述您的用例有点困难,您能通过编辑问题发布相关代码吗?