gpt4 book ai didi

c# - 我如何在不丢弃 RX 中的值的情况下减慢 Observable 的速度?

转载 作者:行者123 更新时间:2023-12-04 00:47:22 24 4
gpt4 key购买 nike

我的场景:我有一个应该每秒运行一次的计算。在它运行之后,应该等待大约 200 毫秒让其他东西 catch 。如果计算在一秒后仍在运行,则应再次启动,但程序是否应等到完成并在完成后 200 毫秒开始下一次计算。

我现在的做法是:

_refreshFinished = new Subject<bool>();
_autoRefresher = Observable.Interval(TimeSpan.FromMilliseconds(1000))
.Zip(_refreshFinished, (x,y) => x)
.Subscribe(x => AutoRefresh(stuff));

此代码的问题是,我看不出有什么办法可以在计算完成后进行延迟。Delay 方法仅延迟可观察集合的第一个元素。通常这种行为是正确的一次,因为如果你想缓冲每个人,你将不得不缓冲无穷无尽的元素,但是由于将对 Autorefesh 的调用延迟 200 毫秒也会将 _refreshFinished 的输出延迟 200 毫秒,因此不会有缓冲开销.基本上我想要一个 Observable,它每隔 MaxTime(some_call,1000ms) 触发一次,然后延迟 200ms 甚至更好,一些动态值。在这一点上,我什至不关心贯穿其中的值(value)观,尽管将来可能会改变。

我愿意接受任何建议

最佳答案

Observable.Generate() 有许多重载,可让您动态调整下一个项目的创建时间。

例如

IScheduler schd = Scheduler.TaskPool;
var timeout = TimeSpan.FromSeconds(1);
var shortDelay = TimeSpan.FromMilliseconds(200);
var longerDelay = TimeSpan.FromMilliseconds(500);
Observable.Generate(schd.Now,
time => true,
time => schd.Now,
time => new object(), // your code here
time => schd.Now.Subtract(time) > timeout ? shortDelay : longerDelay ,
schd);

关于c# - 我如何在不丢弃 RX 中的值的情况下减慢 Observable 的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6402881/

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