3

我怎样才能做到这一点?

我有一个代码:

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

问题是这个第一次调用是一个冷的可观察的,所以在另一个这样的调用中:

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

myObserver 根本不会触发 onNext。显然是因为第一个电话发布了1,2,3, END. 我不想让 observable 调用“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>())observable 做 a 以防止它永远结束。

于 2012-07-20T01:25:06.840 回答
1

在不知道如何在上下文中使用这些 observables 的情况下,我的第一个建议是订阅之前Concat的两个 observables(或s)。IEnumerable

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

据我所知,没有一种方法可以在代码中的ToObservableandSubscribe调用之间插入来获得您所追求的行为。可以编写这样的方法,但它不能很好地与库的其余部分配合使用。

于 2012-07-19T17:44:33.853 回答
1

Fwiw,要将 Cold Observable 变成 Hot Observable,请使用多播:

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 回答