我正在使用 Reactive 扩展(版本 2.1,以防万一)开始开发,对于我的示例应用程序,我需要以一定间隔(即每 1 秒)推送的一系列 int 值。
我知道,我可以创建一个序列,Observable.Range<int>(0,10)
但我不知道如何设置推送之间的相对时间。我已经尝试过Delay()
,但在开始时只改变了一次序列。
然后我找到Observable.Generate()
了可以通过以下方式调整到此任务的方法:
var delayed = Observable.
Generate(0, i => i <= 10, i => i + 1, i => i,
i => TimeSpan.FromSeconds(1));
但这似乎只适用于简单的“for-each-like”定义的序列。所以,总的来说,我的问题是,我们是否可以获取任何源序列并用一些代理包装它,该代理将从源中提取消息并在时间延迟的情况下进一步推送它?
S--d1--d2--d3--d4--d5-|
D--d1-delay-d2-delay-d3-delay-d4-delay-d5-|
PS如果这种方法与 ReactiveExtensions 的概念相矛盾,也请注意这一点。我不想“无论如何”这样做,他们将来会遇到其他一些设计问题。
PPS的一般理念是确保输出序列在事件之间具有指定的间隔,而不管输入序列是有限还是无限以及它推送事件的频率如何。