如果我有一个包含时间戳的对象列表 - 如何制作一个在时间戳之间的相对时间触发事件的可观察对象?
例如。如果我有三个时间戳为 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
. See 这个答案对此有一些见解。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)