Reactive Throttle返回TimeSpan中添加的所有项目

Ric*_*chK 7 c# system.reactive

鉴于IObservable<T>是否有一种使用Throttle行为的方法(在添加项目时重置计时器,但让它返回在该时间内添加的所有项目的集合?

Buffer它提供了类似的功能,它可以IList<T>在每个时间跨度或计数时将数据分块.但是每次添加项目时我都需要重置时间.

我在这里看到过类似的问题,反应式扩展是否支持滚动缓冲区?,但答案看起来并不理想,而且有点旧,所以我想知道Rx-Main的发布版现在是否支持这个功能.

Col*_*nic 10

正如我在另一篇文章中回答的那样,是的,你可以!使用ThrottleWindow方法Observable:

public static IObservable<IList<T>> BufferUntilInactive<T>(this IObservable<T> stream, TimeSpan delay)
{
    var closes = stream.Throttle(delay);
    return stream.Window(() => closes).SelectMany(window => window.ToList());
}
Run Code Online (Sandbox Code Playgroud)

  • 不错的答案!但是不应该使用 `return stream.Publish(hot =&gt;...`) 发布流,以避免订阅两次冷的 observables 吗? (3认同)