从可观察对象缓存最后发出的值

Caching the last emitted value from an observable

在很多情况下,我发现自己需要从可观察对象访问最近发出的值。我这样做的方法是订阅出现的可观察值和缓存值。例如,请参见下文。但是我看到有很多方法,如 Observable.MostRecent、Observable.Latest、Replay(1) 等,它们似乎可以实现我正在寻找的东西,但我不知道如何实现使用它们。有没有比我下面使用的方法更好的方法?

public class WordPrinterWithCache
{
    string _lastWord = string.Empty;

    public WordPrinterWithCache(IObservable<string> words)
    {
        words.Subscribe(w => _lastWord = w);
    }

    public void PrintMostRecent() => Console.WriteLine(_lastWord);
}

以下是实现此行为时我会考虑的两种方法。

var bs = new BehaviorSubject<long>(0); //initial value
source.Subscribe(bs.OnNext);
Console.WriteLine(bs.Value); 

使用 BehaviorSubject 您可以通过 属性.

访问最新值
var ls = source.TakeLast(1);
bs.Subscribe(Console.WriteLine);

使用 TakeLast 时,您必须订阅以访问最新值(尽管在处置前只发出一个值)。