2016-07-03 3 views
1

動的に(実行時に)作成された1つ以上のシーケンスを連結するシーケンスを作成します。Reactive Extensionsでシーケンスを動的に連結

私はmySequence = mySequence.Concat(anotherSequence)を試しましたが、毎回新しいシーケンスが作成されるため、現在のサブスクリプションはmySequenceになります。

答えて

3

観察可能なシーケンスを別のシーケンスに連結する場合、最初のシーケンスは、2番目のシーケンスから値を取得する前に終了する必要があります。 2つ以上のシーケンスをマージするように聞こえるように聞こえます。言い換えれば、シーケンスが値を生成するとすぐに、そのシーケンスから値を取得します。

IObservable<long> mySequence = Observable.Interval(TimeSpan.FromSeconds(0.5)).Take(5); 
IDisposable mySequenceSubscription = mySequence.Subscribe(n => Console.WriteLine(n)); 
IObservable<long> anotherSequence = Observable.Interval(TimeSpan.FromSeconds(0.2)).Take(5); 
mySequence = mySequence.Merge(anotherSequence); 

私は、これらの値を取得することを実行する場合:あなたは私が.Merge.Concatを変更することができた場合、あなたは、現時点では、このようなコードを持っているようなので、それが聞こえる

 
0 
1 
2 
3 
4 

2番目のシーケンスはマージされません。今

、あなたは、あなたがこれを行うことができ、あなたはあなたがマージしたい将来の観測が何であるかのサブスクリプションを作成する時にわからない場合:

Subject<IObservable<long>> sources = new Subject<System.IObservable<long>>(); 
IDisposable sourceSubscription = sources.Merge().Subscribe(n => Console.WriteLine(n)); 

sources.OnNext(Observable.Interval(TimeSpan.FromSeconds(0.5)).Take(5)); 
sources.OnNext(Observable.Interval(TimeSpan.FromSeconds(0.2)).Take(5)); 

さて結果は次のようになり:

 
0 
1 
0 
2 
3 
4 
1 
2 
3 
4 

これは正しく一緒にサブスクリプションが行われた後に追加された2つの観測をマージしました。シンプル。

関連する問題