C#中HttpClient使用注意:预热与长连接(2)

这时,你也许会产生这样的疑问:将HttpClient声明为静态变量,会不会存在线程安全问题?我们当时也有这样的疑问,后来在stackoverflow上找到了答案

As per the comments below (thanks @ischell), the following instance methods are thread safe (all async): CancelPendingRequests DeleteAsync GetAsync GetByteArrayAsync GetStreamAsync GetStringAsync PostAsync PutAsync SendAsync

HttpClient的所有异步方法都是线程安全的,放心使用。

到这里,HttpClient的问题是不是可以完美收官了?。。。稍等,还有一个问题。

客户端虽然保持着TCP连接,但TCP连接是两口子的事,服务器端呢?你不告诉服务器,服务器怎么知道你要一直保持TCP连接呢?对于客户端,保持TCP连接的开销不大;但是对于服务器,则完全不一样的,如果默认都保持TCP连接,那可是要保持成千上万客户端的连接啊。所以,一般的Web服务器都会根据客户端的诉求来决定是否保持TCP连接,这就是keep-alive存在的理由。

所以,我们还要给HttpClient增加一个Connection:keep-alive的请求头,代码如下:

_httpClient.DefaultRequestHeaders.Connection.Add("keep-alive");

现在终于可以收官了。但是肯定不完美,分享的只是解决问题的过程。

HttpClient4 用法 由HttpClient3 升级到 HttpClient4 必看 

HttpClient 教程 

使用HttpClient实现文件的上传下载

Android 实现 HttpClient 请求Https 

Android使用HttpClient下载图片

HttpClient使用详解 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b8f6c676b528e4869f5afc4dac85d4fb.html