【C#】【BUG笔记】Task.Factory.StartNew中异常,数据库连接对象断开问题

场景:订单生成之后,许多后续操作使用Task.Factory.StartNew进行,例如调用,推荐人所推荐用户下单后,增加其计算优惠券推荐人数量。Task.Factory.StartNew偶尔抛出异常:System.InvalidOperationException: ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。

 

原因:

1、Task.Factory.StartNew中调用的是创建订单线程Order_MainBLL类的属性this.DBSession,去执行业务。也就是使用了同一个数据库连接对象this.DbContext。

2、Task.Factory.StartNew创建了任务,在线程池空闲时,才会执行。任务开始时,原创建订单线程已经结束,关闭了数据库连接对象。

 

解决:

使用不同的数据库连接对象。
                            var _DBSession= new Order_MainBLL().DBSession;
                             try
                             {
                                 _DBSession.IOrder_MainDAL.SetOrderSampleConfirmList(oid,isRepeat:1);
                             }
                             catch (Exception ex)
                             {
                                 LogHelper.Instance.Error("余额支付后生成待确认出错:", ex);
                             }

上一篇:《Java并发编程的艺术》读后总结


下一篇:CAS