gpt4 book ai didi

c# - Reactive Extensions (Rx) - 当间隔中没有值时,使用最后一个已知值进行采样

转载 作者:太空狗 更新时间:2023-10-29 23:06:44 25 4
gpt4 key购买 nike

我有一个可观察流,它以不一致的间隔产生值,如下所示:

------1---2------3----------------4--------------5---

我想对此进行采样,但在生成 a 值后没有任何空样本:

------1---2------3----------------4--------------5-----

----_----1----2----3----3----3----4----4----4----5----5

我显然认为可以在此处使用 Replay().RefCount()Sample() 提供最后已知的值,但因为它不会重新订阅到源流,它没有成功。

关于如何做到这一点有什么想法吗?

最佳答案

假设您的源流是 IObservable<int> xs那么你的采样间隔是Timespan duration然后:

xs.Publish(ps => 
Observable.Interval(duration)
.Zip(ps.MostRecent(0), (x,y) => y)
.SkipUntil(ps))

对于通用解决方案,替换 0参数 MostRecentdefault(T)其中 IObservable<T>是源码流类型。

Publish的目的|是为了防止订阅副作用,因为我们需要订阅源两次 - 一次是 MostRecent一次是 SkipUntil .后者的目的是防止在源流的第一个事件发生之前对值进行采样。

如果您不关心在源流的第一个事件之前获取默认值,您可以简化它:

Observable.Interval(duration)
.Zip(xs.MostRecent(0), (x,y) => y)

相关运营商WithLatestFrom可能也有兴趣;这将在下一个版本中出现在 Rx 中。参见 here了解详情。

关于c# - Reactive Extensions (Rx) - 当间隔中没有值时,使用最后一个已知值进行采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30167690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com