我该怎么做?
我有一个代码:
new int[]{1,2,3}.ToObservable().Subscribe(myObserver);
问题是,第一次呼叫是一个冷可观察的呼叫,因此在另一次这样的呼叫中:
new int[]{4,5,6}.ToObservable().Subscribe(myObserver);
myObserver根本不会触发onNext。显然是因为第一个调用发布了1,2,3, END
。我不希望observable调用"END",因为我想稍后继续订阅。有没有一个函数可以轻松地为我做到这一点?
您需要执行以下操作:
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>())
,以防止其永远结束。
在不知道这些可观察性在上下文中是如何使用的情况下,我的第一个建议是在订阅之前Concat
这两个可观察器(或IEnumerable
s)。
(new int[]{1,2,3}.ToObservable())
.Concat(new int[]{4,5,6}.ToObservable())
.Subscribe(myObserver)
据我所知,在代码中的ToObservable
和Subscribe
调用之间没有可以插入的方法来获得您想要的行为。这样的方法是可以编写的,但它不能很好地与库的其他部分配合使用。
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