[英]Create hot observable in Rx from array
我怎樣才能做到這一點?
我有一個代碼:
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(Observable.Never<int>())
以防止它結束。
在不知道如何在上下文中使用這些可觀察對象的情況下,我的第一個建議是在訂閱之前將兩個可觀察對象(或IEnumerable
s)進行Concat
。
(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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.