我有一个客户端-服务器进程,在服务器端长时间运行(2-5 分钟)后,要求用户确认或更改操作结果。
用户可能需要一个小时或更长时间来检查服务完成的工作,进行更改并将其发送回服务。
在一个完美的世界中,没有人会更改服务用于构建操作结果的下划线源数据。但这不是一个完美的世界!
如何锁定以防止损坏我的源数据?我不想要 SQL 表锁定...我正在考虑一种软件机制,例如内存表,其中包含我的所有操作请求和一些互锁条件,以便进入可能损坏其他操作数据的等待状态操作。
还有其他提示吗?
编辑
有关该过程的更多信息可能是必要的..
我有一个带时间戳的实体,它代表电网拓扑的时间点。该实体包含所有未通电的元素的列表。
服务器进程在调用时必须获取所有尚未处理的实体,并为每个元素创建一个列表
public class ElementRecord{
public string ElementName {get;set;}
public DateTime OffTimeStamp {get;set;}
public DateTime OnTimeStamp {get;set;}
}
基于一些业务规则,服务器进程聚合元素并等待用户确认或更改。
问题是实体加载后,真实网络会发生变化,表也会发生变化;同样在一个时间点内,更多的元素可以断电,因此服务器进程必须失效。如果用户 UI 已经在更改数据,我必须尽快提醒某些数据可能无效。
你会做什么?