SqlSugarScope线程安全对象可能避免大多数的线程安问问题
1、SqlSugarClient换成SqlSugarScope (SqlSugarScope 要用单例不然内存会增加)
2、多租户: db.GetConnection 换成 db.GetConnectionScope(Aop也要统一不然事件注册不了)
3、IsAutoCloseConnection=true 需要设置true
重点:SqlSugarScope一定要用单例
如果按步骤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也行)
上面提供的方案可以说99%覆盖,几年下来只要提测试用例的基可以说都上面的问题引起的
如果你不会排查就用笨方法,找到报错的代码 db替换成db.CopyNew()
2016 © donet5.comApache Licence 2.0