10.UniRx序列(HotObservable、ColdObservable)

官方解釋

來自簡書的官方原文

Think of a hot Observable as a radio station. All of the listeners that are listening to it at this moment listen to the same song.
A cold Observable is a music CD. Many people can buy it and listen to it independently.
by Nickolay Tsvetinov

來自C# Rx官方文檔的原文

When does an Observable begin emitting its sequence of items? It depends on the Observable. A “hot” Observable may begin emitting > items as soon as it is created, and so any observer who later subscribes to that Observable may start observing the sequence >somewhere in the middle. A “cold” Observable, on the other hand, waits until an observer subscribes to it before it begins to emit items, >and so such an observer is guaranteed to see the whole sequence from the beginning.
In some implementations of ReactiveX, there is also something called a “Connectable” Observable. Such an Observable does not begin > emitting items until its Connect method is called, whether or not any observers have subscribed to it.

中文意思

什麼時候一個Observable開始輸出序列數據?由Observable本身決定;一個"Hot"Observable有可能在創建的時候開始輸出數據,因此任何訂閱者後來訂閱到Observable可能開始在中間觀察序列;一個"Cold"Observable,換一種說話,一直等待直到一個訂閱者訂閱它,在Observable開始輸出數據之前,因此一個訂閱者必然可以接收到序列的全部數據。
在Rx的某些實現中,也有一些稱作"Connectable"的Observable,例如一個Observable不在開始輸出數據直到Connect方法調用,無論是否有訂閱者訂閱到。

個人翻譯

Observable輸出的數據由Observable本身來決定,輸出什麼關係影響並不大;HotObservable在創建的時候就可以執行代碼,輸出數據了;後來訂閱的訂閱者有可能是在HotObservable執行的中間訂閱,那有什麼影響?收不到數據唄。ColdObservable那就不同,ColdObservable在創建和運行的過程中不會執行任何代碼,也不會有任何的輸出,直到有訂閱者來訂閱他們,纔會開始執行。
對於C#的Rx,我們進行了升級,不再像Java的Rx那麼弱雞,我們有一些稱作"Connectable"的Observable,可以動態的去指定到輸出條件,可以方便快捷的指定到任何你製作的邏輯,無論是否有訂閱者,訂閱,不訂閱,只有調用特定的方法纔會執行Observable。


HotObservable

ColdObservable

總結

由於對於C#的Rx來說,HotObservable和ColdObservable的概念比較模糊,不需要理得特別清楚;大概是可有可無吧,由於C# Rx有其他更高級的字段來替代,這個就可以放下不需要過多去理會,PASS。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章