C# 我怎样才能得到可观察序列的运行总数?
我从Joseph Albahari那里得到一个观察结果:C# 我怎样才能得到可观察序列的运行总数?,c#,system.reactive,C#,System.reactive,我从Joseph Albahari那里得到一个观察结果: IObservable<int> GetHeartBeat() { return Observable.Create<int>((observer, cancelToken) => this.Start(observer, cancelToken)); } async Task Start(IObserver<int> observer, CancellationToken cancel
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++;
}
}
我希望看到:
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获得运行总计的标准方法是使用
扫描操作符。ah,Linq出路;)
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));