只是好奇,是否支持普通 C# 对象上的事务?喜欢
using (var transaction = new ObjectTransaction(obj))
{
try
{
obj.Prop1 = value;
obj.Prop2 = value;
obj.Recalculate(); // may fire exception
transaction.Commit(); // now obj is saved
}
except
{
transaction.Rollback(); // now obj properties are restored
}
}
只是为了让答案更有用;-) 其他语言有类似的东西吗?
STM 更新:其声明如下:
atomic {
x++;
y--;
throw;
}
将使 x/y 保持不变,包括链式方法调用。看起来像我所要求的。至少它非常有趣。我认为这已经足够接近了。另外,其他语言也有类似的东西,例如 Haskell STM。请注意,我并不是说它应该用于生产;-)
微软正在努力解决这个问题。了解软件事务内存。
-
STM.NET http://msdn.microsoft.com/en-us/devlabs/ee334183.aspx
- STM.NET 团队博客 http://blogs.msdn.com/stmteam/
- 9 频道视频:STM.NET:谁。什么。为什么。 http://channel9.msdn.com/posts/Charles/STMNET-Who-What-Why/
- STM论文 http://research.microsoft.com/en-us/um/people/simonpj/papers/stm/index.htm
他们使用几种不同的语法:
// For those who like arrows
Atomic.Do(() => {
obj.Prop1 = value;
obj.Prop2 = value;
obj.Recalculate();
});
// For others who prefer exceptions
try {
obj.Prop1 = value;
obj.Prop2 = value;
obj.Recalculate();
}
catch (AtomicMarker) {
}
// we may get this in C#:
atomic {
obj.Prop1 = value;
obj.Prop2 = value;
obj.Recalculate();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)