Bra*_*non 5 c# multithreading system.reactive
我有一大堆简单的对类:
public class Pair { public DateTime Timestamp; public double Value; }
Run Code Online (Sandbox Code Playgroud)
它们按升序时间戳排序.我想在适当的时间为列表中的每个项触发一个带有Value(例如,Action <double>)的事件.时间是过去的,所以我需要规范化时间戳,使列表中的第一个是"现在".我们可以使用Reactive Extensions设置它,以便在两个项目之间的时间差异之后触发下一个事件吗?
说pairs是你的顺序:
var obs = pairs.OrderBy(p => p.Timestamp).ToObservable();
Run Code Online (Sandbox Code Playgroud)
现在obs将对作为有序的可观察对象.
Observable.Zip(
obs,
obs.Take(1).Concat(obs),
(pair1, pair2) => Observable.Timer(pair1.Timestamp - pair2.Timestamp)
.Select(_ => pair1.Value))
.Concat()
.Subscribe(/* Do something here */);
Run Code Online (Sandbox Code Playgroud)
拉链可以将绝对时间转换为偏移量.它将采用序列并将其与自身连接,但偏移1,如下所示
Original 1--2--4--7--11
Offset 1--1--2--4--7--11
Joined 0--1--2--3--4
Run Code Online (Sandbox Code Playgroud)
然后将这个新值放入其中Observable.Timer以使其延迟适当的量.最终Concat将结果从一个IObservable<IObservable<double>>变为平面IObservable<double>.这假定您的序列是有序的.
| 归档时间: |
|
| 查看次数: |
724 次 |
| 最近记录: |