多线程时,Invalid operation. The connection is closed 返回

SqlSugar 老数据
9 1099

采用“SqlSugar.IOC”方式。

多线程情况下必然会出现以下错误。

System.InvalidOperationException:“Invalid operation. The connection is closed.”

配置方式:

image.png

调用出现问题后,写的一个测试例子

image.png

看了官方的相关文档与资料,没有找到问题所在。

环境:

1、net6.0

2、SqlSugarCore:5.1.3.1


热忱回答9

  • fate sta fate sta VIP0
    2022/9/21

    db.CopeyNew().Queryable<t>().ToListAsync


     Task.WhenAll要加上这个

    0 回复
  • fate sta fate sta VIP0
    2022/9/21
    0 回复
  • Task.WhenAll,仅仅是模拟了一个多线程的情况,我的实际业务并不是这样的写的。现在实际业务上加上了:CopyNew,确实没有出现这个异常了,难道涉及到多线程的都需要这样去写?。这样写有什么副作用没得?https://www.donet5.com/Home/Doc?typeId=2349 这个文档中提到“CopyNew”是针对mysql与PGSQL。SQL server没有提到这个。

    0 回复
  • fate sta fate sta VIP0
    2022/9/21

    @或丶许: Task.WhenAll  SqlSugarScope没有办法去new 新实例所以需要特别写

    0 回复
  • fate sta fate sta VIP0
    2022/9/21

    其他的SqlSugarScope都可以自已维护线程安全

    0 回复
  • fate sta fate sta VIP0
    2022/9/21

    只有TaskWhenAll需要,多线程不需要

    0 回复
  • 我的业务是在Quartz.Net中的job中使用的,难道是因为Quartz.Net,是用的: Task.WhenAll的原因?

    0 回复
  • fate sta fate sta VIP0
    2022/9/21

    @或丶许:有可能的

    0 回复
  • fate sta fate sta VIP0
    2022/9/21

    SqlSugarScope原理是AsyncLocal  ,如果AsyncLcaol认为是同一个异步上下文就没办法去内部new sqlsugarclient,

    还有一种可能是异步用法错引起的 文档入门篇都有写

    0 回复