3

私は次のオブザーバブルを持っています

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
...
...

しかし、私が実際に得ているのは、シリーズの最終値を受け取った後の合計です。

私の実際の目標は、これをパズルに当てはめることです。ホットで継続的に実行されているオブザーバブルが 10 進数の値を与えており、現在の平均値と合計値に 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 に答える