2014-12-05 59 views
2

給定的順序,IObservable<int> source;,有沒有之間的差異:什麼source.StartWith之間的差值(X).Replay(1)和source.Publish(X)

var published = source.Publish(0); 
var publishedConnection = published.Connect(); 

var replayed = source.StartWith(0).Replay(1); 
var replayedConnection = replayed.Connect(); 

據我所知,它們非常相似。它們的默認值都爲零,在訂閱時,觀察者將立即收到source中的最後一個值,source中的所有其他值將被推送給用戶。

我有我讀的地方(我現在找不到)一個模糊的暗示,如果source人來完成,published不會傳遞給新用戶的任何值,而是立即完成,而replayed仍然會重演在完成之前爲新用戶提供最後的價值。

我是否記得這個正確(任何人都可以找到這樣的源代碼),這兩種方法之間還有其他區別嗎?

回答

2

您列出的差異是準確的。 Replay重播,而Publish只發布。我通過編寫五行代碼檢查了這一點。沒有其他顯着差異。源代碼也可在http://rx.codeplex.com上找到 - 雖然我承認對於那些不熟悉它的人來說不容易破譯。

代碼:

var source = Observable.Return(1); 

// comment out as appropriate: 
// this gives no output 
var conn = source.Publish(0); 
// this gives 1 
var conn = source.StartWith(0).Replay(1); 

conn.Connect(); 

conn.Subscribe(Console.WriteLine); 
+1

雖然你也知道一個技術細節,它可能是值得一提的是,這些運營商之間的主要區別是他們的宗旨:Publish'的'在問題的特定超載被設計成隱藏一個'BehaviorSubject'和'Replay'被設計成隱藏一個'ReplaySubject'。 – 2014-12-05 15:40:10

相關問題