Используя последнее значение из IObservable - PullRequest
2 голосов
/ 26 сентября 2011

У меня есть три IObservable типов Foo, Bar и Baz. Кроме того, существует метод, определенный как:

void DoWork(Foo foo);

В других местах IObservable определяется как Subject, а OnNext время от времени вызывается.

Всякий раз, когда доступны новые данные (определенные некоторыми запросами Where), я хочу вызывать метод DoWork с самым последним значением Foo. Если значения Foo не были сгенерированы, метод не вызывается.

Какой самый простой способ сделать это?

Чтобы быть более конкретным, см. Следующий пример. Я хотел бы позвонить DoWork, когда bar или baz изменить, с последним foo (f.id == 1):

void Wire(IObservable<Foo> foo, IObservable<Bar> bar, IObservable<Baz> baz)
{
    foo.Where(f => f.Id == 1)
        .Subscribe(f => DoWork(f));
}

Ответы [ 2 ]

1 голос
/ 26 сентября 2011

Это работает для меня:

var ubar = bar.Select(x => Unit.Default);
var ubaz = baz.Select(x => Unit.Default);

ubar.Merge(ubaz)
    .CombineLatest(foo.Where(f => f.Id == 1), (u, f) => f)
    .Subscribe(f => DoWork(f));
0 голосов
/ 26 сентября 2011

Вы можете использовать Do метод расширения в Observable классе , чтобы сделать это:

IObservable<Foo> filteredList = foos.Where(...);

// Invoke DoWork on each instance of Foo.
filteredList.Do(DoWork);
...