我该怎么做?
我有一个代码:
new int[]{1,2,3}.ToObservable().Subscribe(myObserver);
问题是这第一次调用是一个冷可观察的,所以在另一个这样的调用上:
new int[]{4,5,6}.ToObservable().Subscribe(myObserver);
myObserver根本不会触发onNext。显然是因为第一个电话发布1,2,3, END
。我不希望observable调用“END”,因为我想继续订阅。是否有一个功能可以轻松地为我做这个?
答案 0 :(得分:10)
你需要做这样的事情:
new int[] { 1, 2, 3, }
.ToObservable()
.Concat(Observable.Never<int>())
.Subscribe(myObserver);
new int[] { 4, 5, 6, }
.ToObservable()
.Concat(Observable.Never<int>())
.Subscribe(myObserver);
关键是在observable上做.Concat(Observable.Never<int>())
以防止它永远结束。
答案 1 :(得分:1)
在不知道如何在上下文中使用这些可观察量的情况下,我的第一个建议是在订阅之前Concat
两个可观察量(或IEnumerable
s)。
(new int[]{1,2,3}.ToObservable())
.Concat(new int[]{4,5,6}.ToObservable())
.Subscribe(myObserver)
我知道没有任何方法可以在代码中的ToObservable
和Subscribe
调用之间插入,以获取您所追求的行为。可以编写这样的方法,但它不能与库的其余部分一起使用。
答案 2 :(得分: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