2016-07-21 9 views
0

私は計算スケジューラに登録したときに多くのアイテムを生成し、より重い作業を行う別のoに送信するオブザーバブルを冷やしています。rxJavaは、退会時に観測を停止します

問題は、私がそれを退会したときに観測可能なチェーンをすべて停止したいということです。

そのための演算子はありますか?私はサスペンションを持っているかどうかをチェックしようとしましたが、現時点ではほとんどのアイテムが放出されています。

+0

'subscriber.unsubscribe()'チェーン全体を解除されますを呼び出します。あなたは一本の鎖を持っていますか?いくつかのコードを表示できますか? –

+0

@DaveMoten、私の最初の目に見える停止アイテムは消されますが、私の(遅い) 'フラットマップ'機能は、 '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

私はそれについて考えていないために愚かであると教えています。ありがとう! –

関連する問題