来源之间有什么区别.StartWith(x).回放(1)和来源.发布(x)
本文关键字:发布 回放 StartWith 之间 什么 区别 | 更新日期: 2023-09-27 18:33:10
给定一个序列,IObservable<int> source;
,两者之间有区别吗:
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
仍然会在完成之前将最后一个值重播给新订阅者。
我是否正确记住了这一点(任何人都可以找到说明这一点的来源),这两种方法之间还有其他区别吗?
您列出的差异是准确的。 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);