我使用Buffer
收集一分钟内的所有事件,并将它们显示在列表中:
this.GetServiceAvailablityRxStream
.Buffer(TimeSpan.FromMinutes(1))
.Subscribe(
serviceAvailableList =>
{
...
}
目前,它在T = 1分钟缓冲,然后T = 2分钟,等等。
我想知道是否可以将缓冲移回10秒,例如使其在T = 10秒缓冲,然后T = 1分钟+10秒,然后T = 2分钟+10秒等等。
我尝试了什么
我已经尝试了.Delay
,.DelaySubscription
的所有组合,.Buffer
上的重载,.Delay
命令之前和之后的.Buffer
等等似乎工作。
我想知道这在RX中是否可行?
答案 0 :(得分:3)
是。关键的洞察力是时间可以表示为Observable。因此,使用Buffer
的重载接受一个observable作为边界信号,并使用Observable.Timer
将其传递给您自己的信号:
var first = TimeSpan.FromSeconds(10);
var remainder = TimeSpan.FromMinutes(1);
var boundaries = Observable.Timer(first, remainder);
source.Buffer(boundaries).Subscribe(...);
答案 1 :(得分:2)
您需要创建一个流来定义所需的缓冲区边界。幸运的是,这很容易。以下将定义10秒的初始缓冲区间隔,然后是后续的一分钟间隔:
var bufferBoundaries =
Observable.Timer(TimeSpan.FromSeconds(10), TimeSpan.FromMinutes(1));
然后假设您可以执行xs
的源流:
var bufferedEvents = xs.Buffer(bufferBoundaries);