【发布时间】:2021-12-15 14:39:34
【问题描述】:
我正在使用响应式扩展将数据整理到 100 毫秒的缓冲区中:
this.subscription = this.dataService
.Where(x => !string.Equals("FOO", x.Key.Source))
.Buffer(TimeSpan.FromMilliseconds(100))
.ObserveOn(this.dispatcherService)
.Where(x => x.Count != 0)
.Subscribe(this.OnBufferReceived);
这很好用。但是,我想要的行为与 Buffer 操作提供的行为略有不同。本质上,如果收到另一个数据项,我想重置计时器。只有当整个 100 毫秒都没有收到数据时,我才想处理它。这开启了 从不 处理数据的可能性,因此我也应该能够指定最大计数。我会想象以下内容:
.SlidingBuffer(TimeSpan.FromMilliseconds(100), 10000)
我环顾四周,在 Rx 中找不到类似的东西?任何人都可以确认/否认这一点吗?
【问题讨论】:
-
我确信我在 Rx 的一个教程视频中看到了这种行为,但恐怕我不记得是什么或确切的位置。 :(
-
啊,节流阀 (msdn.microsoft.com/en-us/library/hh229298%28v=vs.103%29.aspx) 是我在想的,但我认为它本身并不能满足您的需求。不确定是否有某种方法可以将它结合起来做想要的事情......
标签: c# .net buffer system.reactive sliding-window