我有网络电话,我想定期打电话。我想只使用运算符Interval和flatMap,但是在间隔的线程上。你能解释一下这种情况吗。我知道Interval只使用一个线程,任务按sequnece处理。
我有initDelay = 0,interval = 10.第一次网络呼叫的呼叫需要12个时间单位,然后是imeddiatelly称为下一个请求。为什么12 + 10时间后不调用?我认为关键是在ClassicTask类中。看起来调用网络调用(decoratedRun)并在它们之后调用新的计划。但这是我的假设不正确的。方法decorated.run()在工作线程上运行并在main上进行规划吗?
答案 0 :(得分:3)
如果你想从上次通话结束到下一次通话开始时用10个时间单位进行网络通话,那么你可以这样做:
Observable.fromCallable( () -> makeNetworkCall() )
.take( 1 )
.repeatWhen( notification -> notification.delay( 10, timeunits, scheduler )
.subscribe( ... );
这将进行网络调用,传递结果值,然后在10个时间单位后重新订阅observable。