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
来代替。从描述中描述您的用例有点困难,您能通过编辑问题发布相关代码吗?