在许多情况下,我发现自己需要从可观察量访问最近发出的值。我这样做的方法是订阅出现的可观察值和缓存值。例如,请参见下文。但是,我看到有一堆方法,如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
您必须订阅才能访问最新值(尽管在处置之前只发出一个值)。