来源之间有什么区别.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仍然会在完成之前将最后一个值重播给新订阅者。

我是否正确记住了这一点(任何人都可以找到说明这一点的来源),这两种方法之间还有其他区别吗?

来源之间有什么区别.StartWith(x).回放(1)和来源.发布(x)

您列出的差异是准确的。 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);