3

我有以下 Observable

IObservable<int> observable = Observable.Range(0, 10);

我有以下订阅

observable.Subscribe(v => Console.WriteLine("Received value: " + v));
observable.Sum().Subscribe(s => Console.WriteLine("Sum so far: " + s));

我想要的输出如下

收到的值:0
到目前为止的总和:0
收到的值:1
到目前为止的总和:1
收到的值:2
到目前为止的总和:3
...
...

但我实际上得到的是在收到系列的最终值后的总和。

我的实际目标是把它融入到我有一个热的、连续运行的 observable 给我十进制值的难题中,我必须 subscribe() 到当前的平均值和总和值。

对此的任何帮助将不胜感激。

4

1 回答 1

3

使用Observable.Scan

var observable = Observable.Range(0, 10);
observable
    .Subscribe(x => Console.WriteLine("Received value: " + x));
observable
    .Scan(0, (sum, x) => sum + x)
    .Subscribe(sum => Console.Writeline("Sum so far: " + sum));

Observable.Sum只会发出一个令牌,这是整个完成序列的总和。Observable.Scan每次从源接收到令牌时都会发出一个令牌。

于 2013-09-12T01:08:13.433 回答