寻找被动式方法来实现昂贵操作的触发器



我的场景如下:

  1. 异步事件在任意时刻触发。
  2. 我想为一批事件触发一个昂贵的操作,例如,其中事件批次相隔 500 毫秒。因此,只要事件的间隔小于 500 毫秒 - 它们就属于同一批次。但是,如果 500 毫秒过去了而没有任何事件,那么是时候触发昂贵的操作了。
  3. 昂贵的操作必须只有最后一个事件的数据,所有以前的事件都可以丢弃。理想情况下,我想避免累积非恒定数量的事件,因为它是多余的。
  4. 如果 500 毫秒没有安静窗口,则不会触发昂贵的操作。即使需要几个小时才能出现这样的窗口。

到目前为止,我所做的是创建Subject<T>类的全局实例,每次有事件时,我都会调用OnNext()方法将事件推送到主题指定的可观察流。

接下来,我知道我需要在我的主题之上构建一个管道,并且该管道应该在每个批次中生成最后一个元素。这就是我要空白的地方。

如果我正确理解了您的问题,您可以使用 Throttle 运算符....

var subscription = myObservable
.Throttle(Timespan.FromSeconds(0.5))
.Subscribe(DoExpensiveOperation) ;

MSDN 文档说"忽略可观察序列中的值,这些值后跟另一个值,在指定源、到期时间和调度程序的到期时间之前。换句话说,限制只会在等待指定的时间跨度后发出事件。 但是,每次收到新事件时,等待期都会重置,因此,如果事件快速传入,则在序列结束之前不会发出任何内容。 这个网站是反应式运算符的优秀背景。 我还推荐Rx .Net HOL,它很旧,有点过时,但它以非常易读的方式涵盖了许多概念。

相关内容

  • 没有找到相关文章

最新更新