2016-09-19 6 views
2

私は観測者に、2秒ごとに固定されたレートでデータを送信しているという観測可能性を持っています。私は、2分後にデータを送信しているオブザーバブルが、完了したことを被験者に伝えた後、それ自体を廃棄する方法が必要です。私は2秒間隔のデータを発信するための2つのタイマーと、合計2分の時間のためのもう1つのタイマーを使用していますので、OnCompleteを送信できます。私はタイマーを使って2分が終わった後も自分自身を処分する方法があるのだろうかと思っていましたか?設定時間の経過後、どのようにオブザーバブルを処分できますか?

Observable.Create<>(
    observer => 
    { 
     var timer = new Timer(); 
     timer.Elapsed += (s, e) => observer.OnNext(*send some string*); 
     timer.start(); 
     return Disposable.Empty; 
    } 
) 

答えて

5

それは本当にかなり単純です:

私のコードは次のようになります。ちょうどこれを行う:

Observable 
    .Interval(TimeSpan.FromSeconds(2.0)) 
    .TakeUntil(Observable.Timer(TimeSpan.FromMinutes(2.0))) 
    .Subscribe(x => 
    { 
    }); 

これは自動的に2分後に観察可能性を終了し、あなたのためにすべてを解除します。

+0

私は[this](http://reactivex.io/documentation/operators/takeuntil.html)を見ていました。それは私が間違っていない限り、それはソースObservableを破壊しないように見えますか?私は2分後に観測可能な情報源を破壊する方法があることを望んでいた。 – Armagetin

+1

@Armagetin - はい、観測可能なソースを破壊します。すべてのサブスクリプションはパイプライン全体をインスタンス化し、サブスクリプションが行われるとすぐにパイプラインも実行されます。 – Enigmativity

+0

助けてくれてありがとう! – Armagetin

関連する問題