我试图获得以下可观察量(缓冲容量为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,还是我必须从头开始实现它?
任何帮助将不胜感激。
答案 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()