2016-11-15 5 views
1

私はRXについて学びたいと思っています。作成したオブザーバを2つの異なるオブザーバに購読しようとしています。複数のオブザーバに購読しているオブザーバは完了していません

var observer = Observer.Create<string>(x => Console.WriteLine(x), 
      () => Console.WriteLine("Completed")); 

var subscription1 = Observable.Interval(TimeSpan.FromSeconds(1)) 
      .Select(x => "X" + x) 
      .Subscribe(observer); 

var subscription2 = Observable.Interval(TimeSpan.FromSeconds(2)) 
      .Select(x => "YY" + x) 
      .Subscribe(observer); 

Console.WriteLine("Unsubscribing in 5 seconds"); 
Thread.Sleep(5000); 
subscription1.Dispose(); 
subscription2.Dispose(); 

Console.WriteLine("All disposed"); 

私はサブスクリプション1の処分後にオブザーバーが完成すると思います。私はここで何が欠けていますか?現在、私は上記のコードから、次のコンソール出力を取得する:あなたが「完了」というメッセージを取得しませんでしよう

Unsubscribing in 5 seconds 
X0 
YY0 
X1 
X2 
YY1 
X3 
All disposed 

答えて

3

Observable.Intervalは無限のシーケンスを作成します。退会することによって、あなたはこの無限のシーケンスを聞くのをやめます。

シーケンスを完了するには、Observable.Interval(...).Take(3)のようなものを使用できます。

+0

ありがとう!私は完全に拒否するということは、聴くのを止めることを意味していた。 :) – Rok

関連する問題