我需要在不同的计算机上独立记录事件,并重建这些事件相对于彼此发生的顺序。该方案要求每台计算机相对独立;他们不能直接相互交谈或与单一来源交谈。
我最初的解决方案记录了每台机器上的时间,但是由于不同机器上的时间可能不同,并且可以全天变化,这并没有完全解决我的问题。我决定在机器 (1) 启动进程或 (2) 系统时钟发生变化时与所有机器共享。
所以从每台机器上我都会得到一个完整的日志
public class Activity {
DateTime TimeOccurred { get; set; }
string Description { get; set; }
}
每当发生上述 (1) 或 (2) 时,我都会在日志中添加一个活动并将其广播到其他机器,这些机器将相同的活动添加到他们的日志中,其中 TranslatedTime 是他们自己的时间:
public class TimeSynchronization : Activity {
string SourceMachine { get; set; }
DateTime TranslatedTime { get; set; }
}
所以机器A会(按顺序):
TimeSynchronization "started" at 3:00 am.
Activity "asked a question" at 3:05 am.
TimeSynchronization from machine B at 3:05 am.
TimeSynchronization "clock changed" at 3:03 am.
Activity "received an answer" at 3:04 am.
机器 B 将(按顺序):
TimeSynchronization "started" at 3:05 am.
TimeSynchronization "clock changed" at 3:06
因此,我需要将上述事件的相同顺序和时间重构为:
On machine A: TimeSynchronization "started" at 0:00
On machine A: Activity "asked a question" at 0:05
On machine B: TimeSynchronization "started" at 0:05
On machine A: TimeSychronization from machine B at 0:05
On machine A: TimeSynchronization "clock changed" at 0:06
On machine B: TimeSynchronization "clock changed" at 0:06
On machine A: Activity "received an answer" at 0:07
List<Activity>
从每台机器中获取 a 并将其按顺序合并到一个列表中的最佳方法是什么?