如果我有一个包含时间戳的对象列表 - 我怎样才能使可观察对象在时间戳之间的相对时间触发事件?
例如。如果我有三个时间戳为 2014-01-01 10:30、2014-01-01 10:45 和 2014-01-01 11:30 的对象,我希望第一个事件立即触发,然后在接下来的 15 分钟后触发, 以及 45 分钟后的最后一个。
我怎样才能加快这个过程,让 1 分钟等于 1 秒?因此,第一个事件会像以前一样立即触发,但下一个事件会在 15 秒后触发,而不是 15 分钟,依此类推。
最佳答案
我敢肯定有很多方法可以做到这一点,但这里有一个使用 Observable.Generate 在特定时间安排事件的快速示例。它使用事件列表 - 但鉴于它与迭代器一起使用,您可以轻松地调整它以使用其他来源:
void Main()
{
var now = DateTime.Now;
var events = new List<Tuple<DateTime, string>> {
Tuple.Create(now.AddSeconds(5), "A"),
Tuple.Create(now.AddSeconds(10), "B"),
Tuple.Create(now.AddSeconds(15), "C")
};
var eventSource = Observable.Generate(
(IEnumerator<Tuple<DateTime,string>>)events.GetEnumerator(),
s => s.MoveNext(),
s => s,
s => s.Current.Item2, // the data
s => s.Current.Item1); // the timing
eventSource.Subscribe(Console.WriteLine);
}
这会在启动后写出“A”、“B”和“C”以及 5、10 和 15 秒。
为了加快时间,您可以围绕如何解释预定时间添加一些逻辑。另一种方法是使用 HistoricalScheduler
。参见 this answer对此有一些见解。
关于c# - 可从时间戳列表中观察到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22255205/