2016-07-21 213 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

我很笨,因爲沒有想到這一點。謝謝! –

相關問題