2016-07-21 215 views
0

我有冷观察,当计算调度程序订阅时产生大量的项目,并发送给另一个谁做了更重的工作。rxJava停止观察取消订阅

问题是我想停止所有可观察链,当我退订它。

这有什么经营者?我试图检查是否有订户,但此时我的大部分物品都已排出。

+0

调用'subscriber.unsubscribe()'将取消整个链条。你有单链吗?你能显示一些代码吗? –

+0

@DaveMoten,Yeap我的第一个可观察的停止发射项目,但是我的(慢速)'flatmap'函数继续处理调用'unsubscribe'之前发射的项目。 –

+0

@GuilhermeTorresCastro您的线程在取消订阅时会中断 - 请检查您正在进行工作时的中断状态并在设置时提前退出。 –

回答

1

创建一个可观察的,做繁重的工作,并可以查看订阅:

obs //emits stuff fast 
    .flatMap(x -> 
    Observable.create(
     sub -> { 
      //frequently check subscription status 
      while (!sub.isUnsubscribed()) { 
      // do some work 
      if (finished) break; 
      } 
      if (!sub.isUnsubscribed()) { 
      sub.onNext(result); 
      sub.onCompleted(); 
      } 
     })) 
     //ensure backpressure compliant 
     .onBackpressureBuffer() 
    ).subscribe(subscriber); 
+0

我很笨,因为没有想到这一点。谢谢! –

相关问题