Save() 操作的 RX 实现,如果自上次执行以来已经过了 2 秒,则该操作将立即运行,或者延迟到 2 秒过去了

问题描述 投票:0回答:1
var i = 0;
var saveSource = Observable.Interval(TimeSpan.FromMilliseconds(200)).Select(x => i++);

var throttledClicks = saveSource 
    .Throttle(TimeSpan.FromMilliseconds(2000)) // Throttle for 2000 milliseconds
    .Subscribe(x => Save()"));

如何执行第一个事件并忽略其他事件,直到前一个事件过去 2 秒后仅执行一次。如果超过2s就立即执行。

现实生活中的例子是调用 Save 方法,如果前一个方法执行时间超过 2 秒,则该方法应立即执行,并等到 2 秒过去才执行它(如果多个 Save 事件到达,则仅执行一次)。 Save 不接受任何参数,因此 x 并不重要。

c# system.reactive reactive
1个回答
0
投票

任务可能是示例扩展方法?

var throttledClicks = saveSource 
    .Sample(TimeSpan.FromMilliseconds(2000)) // Sample every 2000 milliseconds if any
    .Subscribe(x => Save()"));
© www.soinside.com 2019 - 2024. All rights reserved.