缓存来自observable的最后一个发射值

时间:2017-01-16 22:46:28

标签: system.reactive

在许多情况下,我发现自己需要从可观察的角度访问最近发出的值。我这样做的方法是订阅它们出现的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);
}

1 个答案:

答案 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,您必须订阅访问最新值(尽管在处置之前只发出一个值)。