2016-09-21 6 views
1

У меня есть очень простая задача, которую я хотел бы выполнить с помощью rx, и я не уверен, как ее выполнить. Рассмотрим приведенный ниже код как минимальный пример.Получить последнее сообщение от IObservable

 var subject = new Subject<int>(); 

     subject.OnNext(1); 
     subject.OnNext(2); 

     Assert.AreEqual(2, subject.__________()); 
     //      > what goes above < 

Метод должен быть чем-то подвергается только интерфейс IObservable. Есть два полезных перспективных кандидата, которые не делают то, что я надеюсь. Метод Latest будет блокироваться до следующего сообщения, которое не является поведением, которое я ищу. Документация MostRecent выглядела очень многообещающе, но не смогла доставить то, на что я надеялся.

+0

Почему вы пытаетесь это сделать? – Enigmativity

ответ

2

Не существует единого метода, который сделает это. Наблюдателям нужна подписка, которая также может принимать форму оператора для распространения значений. Вам нужна эта подписка активная, когда объект испускает (или OnNext s) значения. Ничто не кэширует или не сохраняет ценности для вас.

Вот пример использования сырьевой подписки:

var subject = new Subject<int>(); 

int last = 0; 

using (subject.Subscribe(i => last = i)) 
{ 
    subject.OnNext(1); 
    subject.OnNext(2); 
} 
Assert.AreEqual(2, last);