我试图在用C#编写的高度并发系统中执行以下操作。
然而 - 我不知道如何实现这一点,而不是在进行更新之前释放项锁。我当前(坏)的解决方案是:
这个解决方案的问题在于我释放了锁定,以便在我更改写入处理失败的项目之前,另一个进程可以获取该项目。
有没有办法创建一个嵌套的事务范围,它可以提交由外部事务范围锁定的项目,同时仍然允许外部范围回滚?
看来我的所有麻烦都来自这样一个事实,即外部范围对内部范围想要更新的项目有锁定。
答案 0 :(得分:0)
我理解这个问题的方式,你要求的是不可能的。
是否有任何阻止您使用与此类似的模式?
begin outer transaction
//do some stuff
bool failedFlag = false;
begin inner transaction
// do some more stuff
if (failed)
failedFlag = true
roll back inner transaction
else
commit inner transaction
end inner
if (failedFlag)
update locked items with failed status
commit outer transaction