与数据库无关的简单 .NET 事务?



我有一个。net WinForms应用程序。在其中,我运行3个函数,不做任何与数据库。我只是想回滚函数的操作,如果有任何失败。

所以我正在寻找只是一个简单的。net事务的例子,但一切我谷歌似乎涉及使用SQL事务处理。

谢谢你的帮助

取决于在事务失败时希望回滚的操作类型。一般来说,您需要实现一个或多个资源管理器,并将它们登记到事务中,以使其工作。

这是一项非常重要的任务,它可能是一个需要镊子的大锤,也就是说你可能不应该尝试它(我同意提到记忆碎片模式的评论者,这值得研究)。简而言之,没有办法简单地"回滚"方法调用,因为它所做的更改可能涉及不同类型的资源(内存、文件系统、web服务等)。

我认为它也充满了各种各样的逻辑困难,比如事务应该只回滚由你的方法执行的更改,还是应该尝试回滚由你的方法调用的其他方法执行的更改?如何执行事务的ACID属性?实际上,您必须在事务期间阻止任何其他线程访问相同的内存位置,以防止脏读取等。关系数据库能够做到这一点,因为它们可以严格控制哪些事务可以访问哪些数据以及何时访问。然而,在单个进程中,当所有线程共享相同的地址空间时,这要困难得多。

如果你只对反转内存操作感兴趣,你应该知道微软曾经考虑将软件事务性内存(STM)作为。net框架的一部分,但由于困难而放弃了这些计划。然而,有一篇非常老的MSDN文章试图实现一些类似的功能(它提供了一个Transactional<T>类型,用于对内存中的值进行事务性访问)。但我从未在实际代码中看到过这种用法。

这可能是一个有趣的研究项目。对于其他事情,底线是不要这样做。: -)

你可以看看实现IEdtiableObject,另一个教程。

最新更新