使用 IObservable 的最新值

发布于 2024-12-06 16:17:17 字数 698 浏览 0 评论 0 原文

我有三个类型为 FooBarBazIObservable。另外,还有一个方法定义为:

void DoWork(Foo foo);

IObservable在别处定义为SubjectOnNext不时被调用。

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

最简单的方法是什么?

更具体地说,请参阅以下示例。我想在 barbaz 更改时调用 DoWork,并使用最新的 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));
}

I've got three IObservable of types Foo, Bar and Baz. In addition, there is a method defined as:

void DoWork(Foo foo);

The IObservable are defined elsewhere as Subject and OnNext is called from time to time.

Whenever new data is available (defined by some Where queries), I want to call the DoWork method with the latest Foo value. If no Foo values were generated the method should not be called.

What is the easiest way to do that?

To be more specific, see the following example. I'd like to call DoWork when bar or baz change, with the latest 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));
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

暖阳 2024-12-13 16:17:17

这对我有用:

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

This works for me:

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));
悟红尘 2024-12-13 16:17:17

您可以使用执行 rel="nofollow">Observable 来执行此操作:

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

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

You can use the Do extension method on the Observable class to do this:

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

// Invoke DoWork on each instance of Foo.
filteredList.Do(DoWork);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文