我想知道在 C# 中是否有一种简单的方式来处理某种事务。假设我们有两个属性,我们想更新它们的值。我们可以写:
A = GetA();
B = GetB();
问题是,如果在分配 B 时抛出异常,则对象将处于不一致状态,因为 A 已更新。我们可以通过存储 A 的当前值并在处理 B 时捕获异常来解决这个问题:
var tempA = A;
A = GetA(); // A is up to date
try { B = GetB(); } catch { A = tempA; } // B is up to date also or A is reverted
即使上述解决方案也无法保存,因为在恢复 A 时可能会引发异常,但关键是,如果 .NET 中有内置机制可以简化此类操作?
我可以想象如下这样的陈述:
transaction { A = GetA(); B = GetB(); }
或代码构造,如:
Transaction.Enter();
A = GetA();
B = GetB();
Transaction.Leave();
在交易之前,机器状态将被存储,在交易之后它将被恢复以防异常。.NET 中有类似的东西吗?