背景:我正在编写一个函数,使用C#将长时间的操作放入队列中,每个操作分为3个步骤:
1.数据库操作(更新/删除/添加数据)
2.使用Web服务进行长时间计算
3.数据库操作(保存步骤2的计算结果)在步骤1中的同一个db表上,并检查db表的一致性,例如,步骤1中的项目是相同的(请参阅下面的更详细的示例)
为了避免脏数据或损坏,我使用锁对象(静态单例对象)来确保作为整个事务完成3个步骤.因为当多个用户正在调用该函数来执行操作时,他们可以在他们自己的操作期间的不同步骤修改相同的db表而没有这个锁定,例如,user2正在他的step1中删除项目A,而user1正在检查A是否仍然存在于他的第3步.(附加信息:同时我正在使用Entity框架中的TransactionScope来确保每个数据库操作都是一个事务,但重复可读.)
但是,我需要把它放到一个使用负载均衡机制的云计算平台上,所以实际上我的锁对象不会生效,因为该功能将部署在不同的服务器上.
问题:如何使我的锁定对象在上述情况下工作?