我想知道是否有一种简单的方式来处理C#中的某种事务.我们假设我们有两个属性,我们想更新它们的值.我们可以写:
A = GetA();
B = GetB();
Run Code Online (Sandbox Code Playgroud)
问题是,如果在分配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
Run Code Online (Sandbox Code Playgroud)
即使上面的解决方案也不是保存,因为在还原A时可以抛出异常,但关键是,如果.NET中有内置机制来完成这样的操作?
我可以想象如下的声明:
transaction { A = GetA(); B = GetB(); }
Run Code Online (Sandbox Code Playgroud)
或代码构造如:
Transaction.Enter();
A = GetA();
B = GetB();
Transaction.Leave();
Run Code Online (Sandbox Code Playgroud)
在交易之前,将存储机器状态,并且在交易之后,如果发生异常,它将被还原.在.NET中有类似的东西吗?
Kam*_*ski 10
"TransactionScope不仅适用于数据库.实现IEnlistmentNotification接口的每个组件都可以参与事务范围的两阶段提交.
以下是事务性内存存储的示例:http://www.codeproject.com/KB/dotnet/Transactional_Repository.aspx "
资料来源:https://stackoverflow.com/a/2273902/1714342
我认为你可以实现这个IEnlistmentNotification
界面并使用TransactionScope
归档时间: |
|
查看次数: |
1929 次 |
最近记录: |