走过的HttpClient坑

一、同步方法中调用异步方法

由于httpclient请求和结果查询都是异步方法,在同步方法中使用时理所当然的使用了Task.Result。自然而然地碰到了两个问题:1.死锁2.线程池爆炸。

1.死锁可以靠严格代码逻辑解决

2.线程池爆了是由于同步方法是webapi接口的步骤,当接口高并发时,每个请求都会由一个线程去执行,但是由于请求的线程比httpclient的Task.Result的优先级高,Task.Result一直未执行,所以每个接口的线程都阻塞在Task.Result处未被释放,内存和线程数不断增长,导致线程池爆了。

其中,netcore部署在Linux环境下(4核8G),最大线程数默认是10,最大端口线程数也是10,很容易超标,需要在程序中设置

上一篇:如何在ASP.NET Core 中使用IHttpClientFactory


下一篇:Java使用实现无验证书的HTTPS请求