我们可以在C#对象上使用事务。
所有事务是否仅适用于MSSQL,ORACLE等关系数据库...... ??
感谢。
答案 0 :(得分:3)
您可能对Software Transactional Memory感兴趣。它存在于.NET世界中的一个实现,名为STM.NET。
软件事务内存 (STM.NET)是一种高效的机制 隔离共享状态。该 程序员划分代码区域 在交易中操作 与其他人“原子化”和“孤立” 交易代码并发运行。
以下是Microsoft STM.NET团队的博客:http://blogs.msdn.com/stmteam/
答案 1 :(得分:3)
你所问的是Software Transactional Memory。由于目前这是一个开放的研究领域,目前还没有本地C#语言支持,因此最好使用existing synchronization options for C#,例如lock
关键字,监视器,等待句柄等
如果您确实需要高级交易功能,那么Microsoft研究会有很多library implementations,例如< edit> SXM STM.NET&lt ; /编辑>
答案 2 :(得分:1)
有关如何在OOP中实现事务的讨论,请查看此discussion。在那里突出显示纪念和状态模式以实现交易行为(以及其他方法)。
答案 3 :(得分:1)
查看软件事务内存(STM.NET)。
它没有进入.Net 4,但可以单独下载
答案 4 :(得分:1)
Joe Duffy的博客上有Interesting article关于尝试在MS处进行交易记忆的问题。如果我总结一下,我会说:只有这样才能自己做。
答案 5 :(得分:0)
c#对象没有类似SQL的事务处理,但如果因为你遇到了线程问题,你应该使用lock
:
lock (myList)
{
if (myList.Count > 0)
myList.Clear();
}
这只是清除一个列表,但确保它不能被另一个线程同时修改。
答案 6 :(得分:0)
您可以使用TransactionScope Class
。
答案 7 :(得分:0)
看起来微软已经离开了。一些推理在这里给出https://www.infoq.com/news/2010/05/STM-Dropped虽然我没有完全卖出它的弱原子位置修改参数。我认为一个强大的原子事务,其中所有对象状态必须位于事务内部仍然具有优点。