C# 如何使一个通用代码块成为事务
我有以下代码:C# 如何使一个通用代码块成为事务,c#,C#,我有以下代码: aClass.DoAJob(); bClass.DoAnotherJob(); cClass.DoAThirdJob(); 我希望它的行为像一个数据库事务,即要么全部执行,要么不执行。有什么建议吗 注意,这与多线程等无关。这只是一般代码。进行“交易”的一般方法如下: 将旧数据保留在适当的位置 将新数据写入临时区域 执行原子操作以用新数据替换旧数据,例如通过更新指针 对于内存中的操作,这可以通过使用对象引用指向状态来实现: class Program { static
aClass.DoAJob();
bClass.DoAnotherJob();
cClass.DoAThirdJob();
我希望它的行为像一个数据库事务,即要么全部执行,要么不执行。有什么建议吗
注意,这与多线程等无关。这只是一般代码。进行“交易”的一般方法如下:
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
对于非内存操作,此模式的实现特定于介质。例如,对于文件操作,程序可能会写入临时文件。所有操作完成后,程序会将文件重命名为用户期望的路径。这可能就是浏览器的下载功能的工作原理
图形(帧缓冲区)和音频(音频缓冲区)也存在类似的机制。当然,数据库有自己的特殊机制,支持原子性和并发性等。生成“事务”的一般方法如下:
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
对于非内存操作,此模式的实现特定于介质。例如,对于文件操作,程序可能会写入临时文件。所有操作完成后,程序会将文件重命名为用户期望的路径。这可能就是浏览器的下载功能的工作原理
图形(帧缓冲区)和音频(音频缓冲区)也存在类似的机制。当然,数据库也有自己独特的机制,支持原子性和并发性等。你能澄清一下你的问题吗?例如,每个方法都做些什么?可能希望操作是原子的,如果需要,则回滚fails@arynaq是的,我明白。谢谢。假设DoAJob做了一个Console.WriteLine,然后DoAThirdJob失败了。你打算怎么取消那个铃声?用户可能已经阅读了控制台。了解数据库如何实现原子性可能对您有所帮助。你了解两阶段提交是如何工作的吗?你能澄清你的问题吗?例如,每个方法都做些什么?可能希望操作是原子的,如果需要,则回滚fails@arynaq是的,我明白。谢谢。假设DoAJob做了一个Console.WriteLine,然后DoAThirdJob失败了。你打算怎么取消那个铃声?用户可能已经阅读了控制台。了解数据库如何实现原子性可能对您有所帮助。您了解两阶段提交是如何工作的吗?