在 C# 中,使用 Rx.net 我有一个源 observable,以及另一个充当触发器的 observable。我正在寻找一个运算符,只要它从触发器接收到一个值,它就会从源可观察对象传输最后一个值 - 但前提是源可观察对象自上次传输值以来至少触发一次。
这可以使用 Buffer 运算符来实现,方法是仅过滤那些缓冲值计数大于 0 的传输。但是,这在内存方面可能非常低效,因为缓冲区将保留所有值,而我只关心最后。
dataObservable.Buffer(triggerObservable).Where(x => x.Count > 0).Select(x => x.Last()).Register(_ => Trigger());
是否有另一种方法可以使用现有的运算符来执行此操作,或者我必须创建自己的运算符?
尝试使用 Window() 运算符来实现此目的 - 它不会将完整列表保留在内存中:
dataObservable.Window(triggerObservable).SelectMany(x => x.Last()).Register(_ => Trigger());