C# 结合实时和历史序列
我使用两种不同的API方法查询财务数据:C# 结合实时和历史序列,c#,system.reactive,reactive-programming,C#,System.reactive,Reactive Programming,我使用两种不同的API方法查询财务数据: 第一个方法一批返回历史数据 第二种方法提供实时数据流 天真的方法是处理历史数据,将其流式处理为IObservable,完成它,然后切换到从未完成的真实数据流: var historicalStream = GetHistoricalData(Datetime.Now.AddHours(-1), Datetime.Now); return historicalStream.Concat(realTimeStream); 它的问题是,在处理历史流时,某
- 第一个方法一批返回历史数据
- 第二种方法提供实时数据流
var historicalStream = GetHistoricalData(Datetime.Now.AddHours(-1), Datetime.Now);
return historicalStream.Concat(realTimeStream);
它的问题是,在处理历史流时,某些实时数据可能会丢失。什么是确保没有遗漏一个勾号的最佳方法(重叠数据不是问题)?您可以
在实时流中重播所有遗漏的事件
var liveStream = realTimeStream.Replay();
liveStream.Connect();
var historicalStream = GetHistoricalData(Datetime.Now.AddHours(-1), Datetime.Now);
return historicalStream.Concat(liveStream);
很好,谢谢!关于它的一个澄清是:liveStream是否会将每一个滴答声都存储在内存中,即使在处理了缓冲滴答声(这可能会对非结束流造成一些不良后果)之后,它仍然会永远保留在内存中(以防另一个订阅者出现)。您可以通过在创建缓冲区时传入参数来限制缓冲区内存大小。^this。或者,您可以将缓冲区
重载与历史流.LastAsync()
一起使用,当历史流
播放完毕时,该重载将关闭缓冲区。