我正在基于云的项目中实现异步。
我现在正试图弄清楚为什么我的TransactionScope
会随机崩溃。消息是“无法执行此操作,因为存在待处理操作”或“操作对于事务状态无效”另一个类似。
我说它会随机崩溃,因为如果你重试这个操作,它最终会起作用......
起初我实施了TransactionScopeAsyncFlowOption.Enabled
重载......失败率下降了
然后我让整个操作使用相同的DbContext
(以前的人为每个CRUD操作创建了一个新的操作,比如为你选择一个用户?新的上下文!现在你想要那个用户的销售吗?让我来使用它一个新的背景!创建一个新的销售?让我们在这个新的背景下这样做...等等......)。失败率进一步下降
然后我决定尽快await
(之前我在操作开始时触发了一些查询,并且只在使用结果之前等待)。这显着改善了失败率。
现在,我在日志中收到一条消息,表示FK不匹配......这真的很奇怪,因为这是一个非常可靠的应用程序而FK逻辑出错是一个非常基本的错误。查看日志,我看到类似“客户端的错误 CLIENT_A 。完成消息:(bla bla bla)数据库中发生冲突 db_CLIENT_B ”!!!
在我的多租户应用中,每个租户都拥有自己的数据库,因此 CLIENT_A 只会出现 db_CLIENT_A 的问题。我们对此非常细致。
这是一个非常严重的问题。这意味着统一容器正在给出错误的DbContext
实例(它是针对每个请求的单个实例配置的)或者是关于async / await以及并行和不同操作的严重问题......我认为它可以混合,考虑到DbContext不是线程安全的,也不是Resolve,虽然它只被调用一次(在管道上很快就会发生DBContext的解析)
所以我的问题是:我能做些什么来解决这个问题?
PS :在过去的7天里,我有5个日志。这可能会发生更多次(转换),但如果其他数据库具有兼容的FK ......那么,我将在几天内在管理人员开始发布财务报告时...
答案 0 :(得分:0)
这是由Unity引起的。当我打电话给“解决方案”时会发生这种情况。在异步范围内。