HttpClient是否有默认并发数限制?
在.Net 4.0之前,一直是依靠HttpWebRequest实现Http操作的。它默认有一个非常保守的同一站点下最大2并发数限制,导致默认情况下HttpWebRequest往往得不到理想的速度(估计这个策略郁闷了不少码农),必须修改App.config或ServicePointManager.DefaultConnectionLimit的值。
MS在.Net 4.5中引入了一个HttpClient类专门处理Http操作,本来我以为HttpClient和HttpWebRequest遵循一样的策略的。今天在写一个多线程下载的程序的时候,用到了10个并发连接,发现在默认的情况下,HttpClient并没有并发数限制。
最初我以为是.Net 4.5取消了这个并发数限制(毕竟现在基本上没有谁遵循这个标准了),然后用WebRequest重写了相关代码,发现依然是2并发上限,并且ServicePointManager.DefaultConnectionLimit的值也是2。也就是说: HttpClient不受HttpWebRequest并发策略控制,也没有系统级的并发限制。
另外,测试的时候发现,HttpWebRequest默认也不是对所有地址都2并发上限的。例如,对本地的http地址连接(http://localhost/*)就没有并发限制。
C#多线程环境下调用 HttpWebRequest 并发连接限制
.net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制