操作员间隔

时间:2018-03-16 15:40:40

标签: java rx-java2

我有网络电话,我想定期打电话。我想只使用运算符Interval和flatMap,但是在间隔的线程上。你能解释一下这种情况吗。我知道Interval只使用一个线程,任务按sequnece处理。

我有initDelay = 0,interval = 10.第一次网络呼叫的呼叫需要12个时间单位,然后是imeddiatelly称为下一个请求。为什么12 + 10时间后不调用?我认为关键是在ClassicTask类中。看起来调用网络调用(decoratedRun)并在它们之后调用新的计划。但这是我的假设不正确的。方法decorated.run()在工作线程上运行并在main上进行规划吗?

1 个答案:

答案 0 :(得分:3)

如果你想从上次通话结束到下一次通话开始时用10个时间单位进行网络通话,那么你可以这样做:

Observable.fromCallable( () -> makeNetworkCall() )
  .take( 1 )
  .repeatWhen( notification -> notification.delay( 10, timeunits, scheduler )
  .subscribe( ... );

这将进行网络调用,传递结果值,然后在10个时间单位后重新订阅observable。