QMT交易系统向服务器同步订单丢失问题排查
1.挂单系统报错,异步挂单后订单挂单回调更新OrderID报错:查找对象为空,起初以为是多线程共享对象属性同步不及时造成的,后来发现在异步挂单执行完毕才对RequestOrderStock属性赋值,因此存在异步挂单执行完毕后,对RequestOrderStock赋值前订单挂单成功回报事件已经触发了,调整写法如下:
2.系统从本地向服务器同步订单过程中,有一个单子无法同步,影响订单同步有两个属性:OrderStatus 和 IsSendServerOrder , IsSendServerOrder 是 Volatile 属性,只要初次挂单成功,所属层IsSendServerOrder 属性变更一定能被其它线程可见。因此可能是OrderStatus 状态更新异常。在日志中发现这个单子初次挂单时,委托单状态更新回报早于异步订单挂单成功回报事件 , 委托单状态更新回报更新OrderStatus,但需要先核对 OrderID,OrderID 更新是在订单挂单成功回调赋值。因此委托单状态回报时,OrderID 尚未更新导致OrderStatus无法赋值。