【发布时间】:2012-02-21 03:10:39
【问题描述】:
我有一个 Web 服务,它返回一个复杂的数据结构,表示一个密集过程的结果。为了使服务响应,该进程在异步任务中运行。
第一次调用服务时,返回一个空数据结构并启动任务。后续的服务调用会返回缓存的数据,直到任务完成。完成后,我需要确定结果是否真的发生了变化。如果是这样,我会更新一个属性,该属性指示更新结果的日期/时间并重置缓存的数据,以便服务返回新结构。在未来的某个时刻,基于各种原因,Task 会重启,逻辑会重复。
我正在寻找最有效的方法来确定结果是否已从“缓存”数据中更改。最简单的方法是在结构中的每个对象上实现 Equals,并且基于其子对象的相等性等,使用父对象的相等性等。因此在根对象上调用 Equals 会产生所需的结果,但这需要爬取整个结构,我不确定这是最好的方法。
我还考虑从原始副本开始,并使用“IsDirty”标志来指示结构中的对象已更改,但担心复制操作可能会抵消任何性能优势。
您会使用什么方法(以及为什么)?
【问题讨论】:
标签: .net c#-4.0 task-parallel-library