使用IObservable中的最新值

时间:2011-09-26 12:50:11

标签: .net c#-4.0 system.reactive

我有三种IObservable类型FooBarBaz。此外,还有一种方法定义为:

void DoWork(Foo foo);

IObservable在别处被定义为Subject并且不时会调用OnNext

每当有新数据可用时(由某些Where查询定义),我想使用最新的DoWork值调用Foo方法。如果未生成Foo值,则不应调用该方法。

最简单的方法是什么?

更具体地说,请参阅以下示例。我希望在DoWorkbar更改后使用最新的bazfoo)致电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 个答案:

答案 0 :(得分:1)

这对我有用:

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));

答案 1 :(得分:0)

您可以使用Do extension method上的Observable class执行此操作:

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

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