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次。一些记录被插入,一些记录收到“死锁”消息。
当我删除"using(transaction)“块时,它工作得很好。但是,我认为我们需要“使用(事务)块”。
发布于 2018-02-01 05:26:51
您的问题是对数据库的混合访问,有时是通过事务访问,有时是在事务外部访问。这会导致锁定问题-锁定在事务内部的资源不能从事务外部再次锁定。这就是僵局。
既然你想要一个事务,我会切换到一个TransactionScope,它应该在异步调用之间进行。
https://stackoverflow.com/questions/48551529
复制相似问题