作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的场景:我有一个应该每秒运行一次的计算。在它运行之后,应该等待大约 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/
我是一名优秀的程序员,十分优秀!