3

これどうやってするの?

私はコードを持っています:

new int[]{1,2,3}.ToObservable().Subscribe(myObserver);

問題は、この最初の呼び出しがコールド オブザーバブルであるため、別の呼び出しでは次のようになることです。

new int[]{4,5,6}.ToObservable().Subscribe(myObserver);

myObserver は onNext をまったくトリガーしません。どうやら最初の呼び出しが公開されるため1,2,3, ENDです。後でサブスクライブを続けたいので、オブザーバブルに「END」を呼び出させたくありません。これを簡単に行う機能はありますか?

4

3 に答える 3

11

次のようにする必要があります。

new int[] { 1, 2, 3, }
    .ToObservable()
    .Concat(Observable.Never<int>())
    .Subscribe(myObserver); 

new int[] { 4, 5, 6, }
    .ToObservable()
    .Concat(Observable.Never<int>())
    .Subscribe(myObserver);

重要なのは.Concat(Observable.Never<int>())、オブザーバブルを終了させないようにすることです。

于 2012-07-20T01:25:06.840 に答える
1

Fwiw、Cold Observable を Hot Observable にするには、Multicast を使用します。

var obs = new[] {1,2,3}.ToObservable()
    .Multicast(new Subject<int>())

// TODO: Subscribe as many people as you want

obs.Connect();  // Everyone subscribed gets 1,2,3,Completed now

obs.Subscribe(...);  // This guy gets no results
于 2012-07-20T14:05:06.183 に答える
1

これらのオブザーバブルがコンテキストでどのように使用されるかを知らなくても、私の最初の推奨事項は、サブスクライブする前にConcat2 つのオブザーバブル (または) です。IEnumerable

(new int[]{1,2,3}.ToObservable())
.Concat(new int[]{4,5,6}.ToObservable())
.Subscribe(myObserver)

私が知っている方法では、コード内のToObservableとのSubscribe呼び出しの間に挿入して、目的の動作を得ることができます。このようなメソッドを作成することはできますが、ライブラリの残りの部分ではうまく機能しません。

于 2012-07-19T17:44:33.853 に答える