TransactionScope是否会像从未发生过一样检测到异步方法错误或继续传递?

时间:2018-09-27 22:50:11

标签: sql-server async-await .net-core commit dapper

我一直在网上到处寻找有关我在工作中遇到的问题的答案,但无济于事。总而言之,我们有一个TransactionScope,在声明该范围的using语句中,我们有一堆async / await方法调用,它们针对单个数据库编写查询,如下所示:

using(var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)()
{
     await repository.InsertQuery1Async(item);
     await repository.InsertQuery2Async(item);
     await repository.InsertQuery3Async(item);

     ts.Complete();
}

这些查询中的每个查询都代表对单个表的插入。问题是,在一个孤立的情况下,InsertQuery2Async似乎失败了,这是根据报告的一个错误判断的,我发现该错误没有在该查询的基础表中插入任何记录。我无法重现此错误,但我对如何发生此事感到困惑。

如果这些Query方法中的任何一个存在错误,TransactionScope是否应该不会检测到该错误并回滚整个事务?

从这种孤立的情况看,看起来Query1和Query3成功提交了,因为我检查了基础数据库表中传递给这些方法的参数,并成功找到了记录。但是与Query2关联的表没有记录。我是否缺少有关Task对象及其异常如何与TransactionScope一起工作的信息?这可能是什么问题?

0 个答案:

没有答案