ReactiveX - 像带有触发器的 Buffer 一样可观察,但只记住最后一个值

问题描述 投票:0回答:1

在 C# 中,使用 Rx.net 我有一个源 observable,以及另一个充当触发器的 observable。我正在寻找一个运算符,只要它从触发器接收到一个值,它就会从源可观察对象传输最后一个值 - 但前提是源可观察对象自上次传输值以来至少触发一次。

这可以使用 Buffer 运算符来实现,方法是仅过滤那些缓冲值计数大于 0 的传输。但是,这在内存方面可能非常低效,因为缓冲区将保留所有值,而我只关心最后。

dataObservable.Buffer(triggerObservable).Where(x => x.Count > 0).Select(x => x.Last()).Register(_ => Trigger());

是否有另一种方法可以使用现有的运算符来执行此操作,或者我必须创建自己的运算符?

c# reactivex rx.net
1个回答
0
投票

尝试使用 Window() 运算符来实现此目的 - 它不会将完整列表保留在内存中:

dataObservable.Window(triggerObservable).SelectMany(x => x.Last()).Register(_ => Trigger());
© www.soinside.com 2019 - 2024. All rights reserved.