有两个超时属性可以在HttpClient上设置:HttpClient.TimeOut和WebRequestHandler.ReadWriteTimeout。
第一个仅是请求/响应的超时,如果下载/上传时间超过它,那么传输将被中断,不会有任何问题。这可以通过将超时设置为无限来覆盖,但我不确定这样做会有什么后果。
现在,后者(ReadWriteTimeOut)-至少在我理解的范围内-应该向下传播到NetworkStream,在那里它影响请求/响应流可以阻塞(空闲)多长时间,直到超时。
HttpClient正在使用HttpWebRequest方法的异步版本,但正如此处所述:
因此,我的问题是,HttpClient如何处理网络/协议超时?我想使用HttpClient上传/下载潜在的大文件,所以我将HttpClient.TimeOut设置为无限。但我担心这样做会使应用程序面临等待服务器/网络拒绝完成某些事件的风险。
第一个仅是请求/响应的超时,如果下载/上传时间超过它,那么传输将被中断,不会有任何问题。这可以通过将超时设置为无限来覆盖,但我不确定这样做会有什么后果。
现在,后者(ReadWriteTimeOut)-至少在我理解的范围内-应该向下传播到NetworkStream,在那里它影响请求/响应流可以阻塞(空闲)多长时间,直到超时。
HttpClient正在使用HttpWebRequest方法的异步版本,但正如此处所述:
根本没有解释他们想要什么样的超时机制(网络流空闲超时?整个HTTP GET的超时?等等...),这让我感到非常困惑。在异步请求的情况下,客户端应用程序负责实现自己的超时机制。
因此,我的问题是,HttpClient如何处理网络/协议超时?我想使用HttpClient上传/下载潜在的大文件,所以我将HttpClient.TimeOut设置为无限。但我担心这样做会使应用程序面临等待服务器/网络拒绝完成某些事件的风险。
HttpClient
的构造函数。在那之前,请将WebRequestHandler
的ReadWriteTimeout
属性设置为您想要的任何值。这篇文章 可能会帮助解释一些东西。 - Paya