我有以下代码:
aClass.DoAJob();
bClass.DoAnotherJob();
cClass.DoAThirdJob();
我希望它表现得像数据库事务一样。它们要么全部执行要么不执行。有什么建议吗?
NB这与多线程等无关。这只是一般代码。
答案 0 :(得分:2)
进行“交易”的一般方法如下:
对于内存中操作,这是通过使用对象引用指向状态来简单实现的:
class Program
{
static Point _position; //Points to latest position of something
static void Move(int x, int y)
{
var temp = new Point(x, y);
_position = temp;
}
}
此示例使程序可以移动对象,同时保证x
和y
一起更新。
对于非内存操作,此模式的实现特定于介质。例如对于文件操作,该程序可能会写入一个临时文件。完成所有操作后,程序会将文件重命名为用户期望的路径。这可能是浏览器的下载功能的工作方式。
图形(帧缓冲区)和音频(音频缓冲区)也存在类似的机制。当然,数据库具有其自己的特定机制,该机制除其他外还支持原子性和并发性。