【发布时间】:2016-02-22 15:22:37
【问题描述】:
我的问题有点像 Nagle algorithm 旨在解决的问题,但不完全一样。我想要将来自IObservable<T> 的OnNext 通知缓冲到IObservable<IList<T>>s 序列中,如下所示:
- 当第一个
T通知到达时,将其添加到缓冲区并开始倒计时 - 如果另一个
T通知在倒计时到期之前到达,请将其添加到缓冲区并重新开始倒计时 - 一旦倒计时结束(即生产者已经静默一段时间),将所有缓冲的
T通知作为单个聚合IList<T>通知转发。 - 如果在倒计时结束前缓冲区大小超过某个最大值,请无论如何发送。
IObservable<IList<T>> Buffer(this IObservable<T>, Timespan, int, IScheduler) 看起来很有希望,但它似乎会定期发送汇总通知,而不是“在第一个通知到达时启动计时器并在其他通知到达时重新启动它”我想要的行为,而且它也如果没有从下方生成通知,则在每个时间窗口结束时发送一个空列表。
我确实不想要删除任何T 通知;只是缓冲它们。
这样的东西存在吗,还是我需要自己写?
【问题讨论】:
-
您可以修改the answer in this thread 以添加“缓冲区满时发送”。
标签: c# system.reactive reactive-programming