Учитывая последовательность, IObservable<int> source;
, есть разница между:Какая разница между source.StartWith (х) .Replay (1) и source.Publish (х)
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
бы еще переиграть последнее значение для новых подписчиков до завершения.
Я правильно это помню (и может ли кто-нибудь найти источник, заявляющий так), и существуют ли какие-либо другие различия между этими двумя методами?
Хотя техническая деталь, как вы знаете, это может быть стоит отметить, что основное различие между этими операторами является их целью: Конкретное перегрузка 'Publish' в вопросе призвана скрыть 'BehaviorSubject' и' Replay' предназначены для скрытия 'ReplaySubject'. –