0
public async Task<T> Method1(){      
    using (var transaction = Conn.GetTransaction())
            {
                await Conn.DeleteMany<M1>().Where(x => (x.d == dId).ExecuteAsync();
                foreach (var l in listData)
                {
                    await Conn.InsertAsync(l);
                }
                transaction.Complete();
            }
    }


public async Task<T> callerMethod(){
   var res = await serivce.Method1();
}

for(int i = 0; i <25; i++){
    callerMethod();
}

当我通过 web api 调用它时[通过循环调用它> 25 次]。一些记录被插入,一些记录得到“死锁”消息。

当我删除“使用(事务)”块时,它工作正常。但是,我相信我们需要有“使用(交易)块。

4

1 回答 1

-1

您的问题是对数据库的访问混合,有时通过事务,有时在事务之外。这会导致锁定问题 - 在事务内部锁定的资源无法从事务外部再次锁定。这就是僵局。

既然你想要一个事务,我会改用一个TransactionScope,它应该在异步调用中进行。

于 2018-01-31T21:26:51.120 回答