Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 结合实时和历史序列_C#_System.reactive_Reactive Programming - Fatal编程技术网

C# 结合实时和历史序列

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); 它的问题是,在处理历史流时,某

我使用两种不同的API方法查询财务数据:

  • 第一个方法一批返回历史数据
  • 第二种方法提供实时数据流
天真的方法是处理历史数据,将其流式处理为IObservable,完成它,然后切换到从未完成的真实数据流:

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()
一起使用,当
历史流
播放完毕时,该重载将关闭缓冲区。