Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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_Rx.net - Fatal编程技术网

C# 从可观测的最新历史数据切换到可观测的实时数据,无需重复

C# 从可观测的最新历史数据切换到可观测的实时数据,无需重复,c#,system.reactive,rx.net,C#,System.reactive,Rx.net,应用程序(Saver)通过websocket从远程服务器接收实时数据,并将其存储在数据库中。它向客户端公开一个REST端点,该客户端返回迄今为止存储在数据库中的所有数据 客户端应用程序在启动时订阅远程服务器websocket上的实时数据。然后,它向Saver的REST端点发出请求,并接收到目前为止的所有数据 这两个数据源在客户端应用程序中都显示为IObservable AType包含时间戳属性 我如何组合这两个观测值,使它们是连续的(按时间戳),没有重复 更新:在任何一个数据源/观测值中都不可能

应用程序(Saver)通过websocket从远程服务器接收实时数据,并将其存储在数据库中。它向客户端公开一个REST端点,该客户端返回迄今为止存储在数据库中的所有数据

客户端应用程序在启动时订阅远程服务器websocket上的实时数据。然后,它向Saver的REST端点发出请求,并接收到目前为止的所有数据

这两个数据源在客户端应用程序中都显示为
IObservable

AType
包含时间戳属性

我如何组合这两个观测值,使它们是连续的(按时间戳),没有重复


更新:在任何一个数据源/观测值中都不可能出现重复,但当它们组合在一起时,就可能出现重复,因为websocket是在调用REST端点之前订阅的。为了避免数据丢失,它们被订阅。

不可能在没有缓冲/窗口的情况下按值对实时流进行排序。您需要使用
Observable.buffer
/
Observable.Window
运算符显式缓冲合并流(
Observable.Merge
),然后可以使用
Enumerable.SortBy
按时间戳排序

以下是rxnet github页面中的相关问题:

有一个
Observable.Distinct
操作符,但是在长时间运行/高吞吐量流上使用它时要小心,因为它存储值的散列以检测重复项

我的工作解决方案:

订阅websocket

通过REST检索到目前为止的所有数据

如果有任何内容通过websocket到达,则获取第一个项目的时间戳,并从REST结果中删除该项以及以后的任何内容

将两条流按如下方式组合:

        combinedObservable = truncatedRestData.ToObservable().Concat(socketObservable);