簡體   English   中英

如何獲得可觀察序列的總計?

[英]How can I get a running total of my observable sequence?

我正在接受Joseph Albahari的觀察:

IObservable<int> GetHeartBeat()
{
    return Observable.Create<int>((observer, cancelToken) => this.Start(observer, cancelToken));
}

async Task Start(IObserver<int> observer, CancellationToken cancelToken)
{
    int beat = 0;
    var random = new Random();
    while (beat < 10)
    {
        await Task.Delay(random.Next(500) + 700, cancelToken);
        observer.OnNext(beat);
        beat++;
    }
}

然后我運行這個:

var observable = this.GetHeartBeat()
    .TimeInterval()
    .Buffer(3, 1)
    .Select(l => l.Average(x => 60 / x.Interval.TotalSeconds));
observable
    .Select(i => string.Format("{0}, ", i))
    .Concat(observable.Count().Select(i => string.Format("{0}", i)))
    .Subscribe(i => System.Diagnostics.Debug.WriteLine(i));
observable.Wait();

我希望看到這個:

71.9889864709428, 1
72.9592264002639, 2
67.6743699542054, 3

等等

但我看到了這個:

71.9889864709428, 
72.9592264002639, 
67.6743699542054, 

我現在有多么錯誤?

我想你需要這個:

var observable = this.GetHeartBeat()
    .TimeInterval()
    .Buffer(3, 1)
    .Select((l, i) => string.Format("{0}, {1}", l.Average(x => 60 / x.Interval.TotalSeconds), i))
    .Subscribe(i => System.Diagnostics.Debug.WriteLine(i));

使用Rx獲取運行總計的標准方法是使用Scan運算符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM