我想运行周期性任务,但有一个限制:在任何给定时间最多只能运行一个方法的一次执行。
我正在尝试 Rx,但我不确定如何施加最多一次并发限制。
var timer = Observable.Interval(TimeSpan.FromMilliseconds(100));
timer.Subscribe(tick => DoSomething());
此外,如果任务仍在运行,我希望后续计划过去。即我不希望任务排队并导致问题。
我有 2 个这样的任务要定期执行。当前正在执行的任务是同步的。但是,如果有必要,我可以使它们异步。
您走在正确的道路上,您可以使用Select
+ Concat
展平可观察量并限制飞行请求的数量(注意:如果您的任务花费的时间超过间隔时间,那么它们将开始堆积,因为它们无法足够快地执行):
var source = Observable.Interval(TimeSpan.FromMilliseconds(100))
//I assume you are doing async work since you want to limit concurrency
.Select(_ => Observable.FromAsync(() => DoSomethingAsync()))
//This is equivalent to calling Merge(1)
.Concat();
source.Subscribe(/*Handle the result of each operation*/);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)