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

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

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

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

二、解决方式

将Task.Result改为await