在许多情况下,我发现自己需要从可观察的角度访问最近发出的值。我这样做的方法是订阅它们出现的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);
}
答案 0 :(得分:1)
在实现此行为时,我会考虑以下两种方法。
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
,您必须订阅访问最新值(尽管在处置之前只发出一个值)。