.net 使用反应式扩展(RX),是否可以将缓冲时间向后移动10秒?
我正在使用.net 使用反应式扩展(RX),是否可以将缓冲时间向后移动10秒?,.net,visual-studio-2012,.net-4.5,system.reactive,.net,Visual Studio 2012,.net 4.5,System.reactive,我正在使用Buffer收集一分钟内的所有事件,并将它们显示在列表中: this.GetServiceAvailablityRxStream .Buffer(TimeSpan.FromMinutes(1)) .Subscribe( serviceAvailableList => { ... } 目前,它在T=1分钟时缓冲,然后T=2分钟,以此类推 我想知道是否可以将缓冲
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
上重载、在.Buffer
命令前后放置.Delay
等所有组合,但似乎没有任何效果
我想知道这在RX中是否可行?您需要创建一个流来定义所需的缓冲区边界。幸运的是,这很容易。以下将定义10秒的初始缓冲区间隔,然后是随后的1分钟间隔:
var bufferBoundaries =
Observable.Timer(TimeSpan.FromSeconds(10), TimeSpan.FromMinutes(1));
然后假设源流为xs
,您可以执行以下操作:
var bufferedEvents = xs.Buffer(bufferBoundaries);
对。关键的洞察是,时间可以表示为一个可观察的事实。因此,使用
缓冲区的重载
,它接受一个可观察的作为边界信号,并使用可观察的将其传递给您自己的信号。计时器
:
var first = TimeSpan.FromSeconds(10);
var remainder = TimeSpan.FromMinutes(1);
var boundaries = Observable.Timer(first, remainder);
source.Buffer(boundaries).Subscribe(...);
我忘了定时器的超负荷工作了+1@JamesWorld事实上,有太多的运算符变体,无法完全记住它们!