2014-12-05 62 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

相关问题