反应式扩展:是否可以订阅缓冲区操作结果的总和



我正在尝试获取有关聚合函数(即 Sum)结果的通知,该函数对无限序列的部分序列进行操作(最顶层,数据源序列永远不会完成)。问题可以在这里看到:

var seq = Observable.Interval(TimeSpan.FromMilliseconds(20)).Buffer(10);
seq.Sum(l => l.Sum())
            .Subscribe(n =>
                s_log.DebugFormat("Got {0}", n));

Lambda l.Sum() 按预期调用(计算部分总和),但"Got ..."行永远不会打印,因为从不调用订阅者。我怀疑它与原始序列的"永无止境"角色有某种关系。有限序列:

 Observable.Range(1,100).Buffer(10);

按预期工作。所以问题很简单:如何将无限序列的部分片段"标记"为"完整",以便聚合函数将单独处理它们(并将其结果推送给订阅者)?

Scan 是你的朋友:

seq.Scan(0L, (l1, l2) => l1 + l2.Sum())
   .Subscribe(n => Console.WriteLine("Got {0}", n));

最新更新