観察可能なものとしてsource
があると仮定すると、キーでグループ化されサンプリングされたすべての価格が1秒前に返されます。
var sampled = source
.GroupBy(p => p.Key)
.SelectMany(o => o.Sample(TimeSpan.FromSeconds(1)));
最後の1秒間にメッセージを受け取っていない価格がある場合、それは含まれません。
古い価格が含ましたい場合、これは動作します:
var sampled2 = source
.Scan(ImmutableDictionary<int, Price>.Empty, (state, p) => state.SetItem(p.Key, p))
.Replay(1)
.RefCount();
var dummySubscription = sampled2.Subscribe();
var result = Observable.Interval(TimeSpan.FromSeconds(1))
.SelectMany(_ => sampled2.Take(1).SelectMany(state => state.Values));
だけで観測可能result
で行われたときにDummySubscription
を処分することを確認してください。
ありがとうございました。しかし、1秒以上前に受け取った価格もどうやって含めることができますか? – ahallan
回答が更新されました。 – Shlomo