Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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
Rx java RxJava:如果源速度太慢,则插入额外的发射_Rx Java - Fatal编程技术网

Rx java RxJava:如果源速度太慢,则插入额外的发射

Rx java RxJava:如果源速度太慢,则插入额外的发射,rx-java,Rx Java,我有一个rxjavav1.x可观察(实际上是一个主题),在正常情况下,它每秒会发出一次元素。有时可能会出现中断,导致排放停止一段时间(没有发出错误信号或完成!),直到它们以正常速率再次恢复 我正在寻找一种方法,将此可观测源转换为另一个可反射每个源排放的源,但如果源保持沉默太长时间(例如超过30秒),则“插入”一个特殊的“占位符元素”,而不取消从源的订阅(即,它仍应反射后续源排放) 我将尝试说明这种情况: source: s[t=1], s[t=2], s[t=3], s[t=40], s[t=4

我有一个rxjavav1.x可观察(实际上是一个主题),在正常情况下,它每秒会发出一次元素。有时可能会出现中断,导致排放停止一段时间(没有发出错误信号或完成!),直到它们以正常速率再次恢复

我正在寻找一种方法,将此可观测源转换为另一个可反射每个源排放的源,但如果源保持沉默太长时间(例如超过30秒),则“插入”一个特殊的“占位符元素”,而不取消从源的订阅(即,它仍应反射后续源排放)

我将尝试说明这种情况:

source:
s[t=1], s[t=2], s[t=3], s[t=40], s[t=41], ...

result:
s[t=1], s[t=2], s[t=3], x[t=33], s[t=40], s[t=41], ...
这里,
x
是源保持沉默30秒(即t=33时)后发出的“插入”元素


理想情况下,我希望实现这一点,而不必停止或重新启动源。

可能的重复:是否需要多个占位符?因此,如果源代码沉默了80秒,你想看到两个占位符吗?我不确定RxJava,但在C语言中,你可以这样做:
source.Select(x=>Observable.Interval(TimeSpan.FromSeconds(30.0)).Select(y=>-1L).StartWith(x)).Switch()
@Shlomo一个占位符就可以了enough@Matthias-然后
source.Select(x=>Observable.Timer(TimeSpan.FromSeconds(2.0)).Select(y=>-1L).StartWith(x)).Switch()
可以在C#中使用。