簡體   English   中英

在Rx中從數組創建熱的observable

[英]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)

我知道沒有方法可以在代碼中的ToObservableSubscribe調用之間插入以獲取您所追求的行為。 可以編寫這樣的方法,但它不能與庫的其余部分一起使用。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM