偶发性错误

 步骤1 (80%可以解决):

SqlSugarScope线程安全对象可能避免大多数的线程安问问题

1、SqlSugarClient换成SqlSugarScope  (SqlSugarScope  要用单例不然内存会增加)

2、多租户: db.GetConnection 换成 db.GetConnectionScope(Aop也要统一不然事件注册不了)

3、IsAutoCloseConnection=true 需要设置true

重点:SqlSugarScope一定要用单例

 步骤2 (1+2可以99%解决): 

如果按步骤1改了还报错那么肯定就下面4种情况:

1、异步方法不写await 需要db替换成db.CopyNew() ,不想加CopyNew就需要排查是否有漏掉await

2、使用await方法的返回值必须有Task,不能是Void 这种,不想找就CopyNew解决

3、Task.WhenAll必须要用Task.Run(async=>await 异步方法 ) 必须用Task.Run包一下(CopyNew也行)

4、表达式中用异步 注意 Action的表达式禁止用异步 ,需要是 Func<Task>这种类型的才能用异步 ,例如List.Foreach

并行循环等他们是非Task表达式  (CopyNew也行) 

 笨方法 (100%可以解决)

上面提供的方案可以说99%覆盖,几年下来只要提测试用例的基可以说都上面的问题引起的

 如果你不会排查就用笨方法,找到报错的代码 db替换成db.CopyNew() 

 


文档:SqlSugar5.0