Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用反应式扩展(RX),是否可以将缓冲时间向后移动10秒?_.net_Visual Studio 2012_.net 4.5_System.reactive - Fatal编程技术网

.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事实上,有太多的运算符变体,无法完全记住它们!