2017-01-16 10 views
2

多くの場合、観測値から最近放出された値にアクセスする必要があります。私がこれをやったやり方は、観測値とキャッシング値が現れたときにそれを購読することです。例えば以下を参照してください。しかし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

あなたは私の提案のいくつかを使用して終了しましたか、独自の方法を実装しましたか? – supertopi

+1

私はこれを何もする必要がないようにしようとしていますが、私はオブザーバブルの周りに自分のコードを構成し、私が最新のものを望むなら、私はCombineLatestかWithLatestFromを使用します。 – JustinM

答えて

1

これは、この動作を実装する際に私が検討する2つの方法です。

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

BehaviorSubjectを使用すると、プロパティで最新の値にアクセスできます。あなたは(一つの値だけを処分する前に放出されるが)、最新の値にアクセスするために登録する必要がありTakeLast

var ls = source.TakeLast(1); 
bs.Subscribe(Console.WriteLine); 

+0

BehaviorSubjectは、IObservableを持っていて最新の値を取得したいという問題を解決しません。私がBehaviorSubjectを持っていたら、.Valueメソッドを呼び出すだけです。 TakeLastとおそらく他の同様の発音方法は、あなたが購読するときに本当に何かをすることを覚えておいてください。 – JustinM

関連する問題