一个循环一直调用SyncInvRquest()这个方法。
有时候循环完了不报错。
有时候循环到一半就报错。
都是post的同样的数据。
谢谢各位大哥!
我猜 是由于post 数据接收方,数据处理能力不足,导致post方法异常,如果是这个问题可以捕获下异常。
应该不是,循环里加了Thread.Sleep(500)
循环里调用SyncInvRquest()这个方法的时候,前面加个延时,阻塞线程半秒试试~~ Thread.Sleep(500);
看下那个聚合异常内部的异常是什么
ps,不要使用Wait,.Result等方式来强制同步结果,代码中要么全异步,要么全同步,不要混合在一起,这样可以避免很多很难发现的死锁问题。
把HttpClient放在循环外面new,不要每次都new一个,不要.Result这样用,容易死锁。
一开始我也放在外面的,也不行
官方曾经给出说明,太多httpclient会造成socket阻塞,用静态的httpclient
一开始用的是静态的,也报错
既然 HttpClient 使用这么 频繁,建议 可以 单独 拎出来 作为 静态对象。
以便于 多次 重复使用。
另外 为什么要 调用 Wait ?
应该直接 获取 Result 才对啊。
上面的都试过了
一开始直接用的静态, Result 获取结果
但是还是有时候报错
有时候不报错
坑人啊
@农村外出务工人员:
建议 去看看 AggregateException 的 异常结构 http://www.cnblogs.com/ProJKY/p/AggregateExceptionDesign.html
和异常处理。
http://www.cnblogs.com/Jusfr/archive/2012/05/29/2523795.html
捕获该异常。
另外 HttpClient一般也不是 给你 这样 循环用的。
而是应该 把循环的请求 合并为一个请求 例如 通过 传送 json 对象 数组
然后 一次获取多个结果。
我认为 这个异常可能是 因为 你 调用的次数 太频繁 或者 产生的错误太多 有一定的关系。
即使 单个 线程中 你的 循环是同步的 但是不同的请求还是会产生N个 并行执行的调用。
无论如何 还是尽量:
1.使用单例对象。
2.合并N个请求变为一个,减少请求次数。
3.捕获 并 输出 AggregateException 这个错误的具体信息 以供分析。
@SoarNo1: 谢谢,找到了原因,是API那边的原因.