RX和缓冲

时间:2015-11-11 14:33:26

标签: system.reactive reactive-programming

我试图获得以下可观察量(缓冲容量为10个刻度):

Time    0    5    10   15   20   25   30   35   40
        |----|----|----|----|----|----|----|----|
Source  A  B C   D        E F  G    H

Result            A                 E         H
                  B                 F
                  C                 G
                  D

Phase   |<------->|-------|<------->|<------->|
             B        I        B         B

也就是说,行为与Buffer observable非常相似,不同之处在于缓冲阶段不在精确时隙中,而是从在空闲阶段推送的第一个符号开始。我的意思是,在上面的示例中,缓冲阶段始于&#39; A&#39; E&#39;和&#39; H&#39;符号。

有没有办法组成observable,还是我必须从头开始实现它?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

试试这个:

/^(([1-9]|0[1-9]|1[0-9]|2[1-9]|3[0-1])[-](JAN|FEB|MAR|APR|MAY|JUN|JULY|AUG|SEP|OCT|NOV|DEC)[-](\d{4}))$/i

缓冲区关闭选择器在开始时调用一次,然后在缓冲区关闭时调用一次。选择器说&#34;正在启动的缓冲区现在应该在此缓冲区的第一个元素之后关闭IObservable<T> source = ...; IScheduler scheduler = ...; IObservable<IList<T>> query = source .Publish(obs => obs .Buffer(() => obs.Take(1).IgnoreElements() .Concat(Observable.Return(default(T)).Delay(duration, scheduler)) .Amb(obs.IgnoreElements()))); ,或者当源完成时,以先发生者为准。&#34; < / p>

修改:根据您的评论,如果您要对duration进行多次订阅,只需订阅query订阅,您就可以通过在查询中附加source来实现。{ / p>

.Publish().RefCount()