如何在确定性触发序列上确定性地窗口可观察序列

时间:2016-05-15 17:51:55

标签: c# system.reactive

考虑Observable.Window在源序列同步导出的触发序列上切断源序列的情况。最简单的情况是将序列切割成大小为1的窗口(如sequence.Window(sequence)中所示),但考虑一个最简单的更复杂的例子:

var source = Observable.Range(0,5);
source.Publish(ps =>
  ps.Window(ps.Where(n => n % 3 == 0))).Dump();

a.Windows(b)每当a生成一个项目时,b就会为序列Window打开一个新窗口。事实上,在这个样本中,两个序列同时产生项目。 a实施可能

  • (1)首先从b收到一个项目,然后接收{ { 0 }, { 1, 2, 3 }, { 4 } }并关闭当前窗口,这样我们就会在输出中看到b,或
  • (2)首先接收a并关闭窗口,然后通过{ { }, { 0, 1, 2 }, { 3, 4 } }到新打开的窗口,在这种情况下我们会看到Window)。它也可能
  • (3)投掷硬币并在每种情况下做出决定 - 这是我必须承担的事情,直到我阅读规范为止。

事实上,我看到LINQpad中的行为(1)与System.Reactive 2.3.0-forever-beta。

我的问题是,

  1. 选择(1)是否记录在何处?我可以依靠吗?
  2. 如果不是,并且onCreateView()即使对于确定性相互观察排序中的序列也是非确定性的,那么是否存在以确定性方式窗口化序列的另一种方式,在 >一个值满足给定的谓词?

0 个答案:

没有答案