如何实现基于运行时间的有限数量的方法执行?



我想知道是否有类似于每分钟执行限制的框架。

假设我有一个API,每分钟可以请求100次。

如果我发送一个"hello world"在循环中,我将超过该限制。

例如:

ExecutionLimiter executer = ExecutionLimiter(executions: 100, duration: Duration(minutes: 1));
while (true) {
executer.add(() => print(“hello world“));
}

我找到了包队列,但这只是为了并行化。

谢谢你的帮助。

可以使用Timer。

每隔一段时间激活一个方法。
_timer = Timer.periodic(Duration(milliseconds: 600), (Timer t) {
// Send single api request every 600 ms
});
// Stop sending requests
Future.delayed(const Duration(minutes: 1), () {
_timer.cancel();
});

只是不要忘记将它保存在变量中,并在使用结束时处理它。

在Yair Chen的支持下,我创建了一个简短的示例程序,在给定的时间范围内执行该函数n次。执行时间将被考虑在内。

import 'dart:async';
import 'dart:math';
List<Instance> instances = [];
int executionLimit = 10;
int apiCallLimitInSeconds = 5;
// for test purposes
int elapsedTime = 0;
int executedFunctions = 0;
main() {
Timer.periodic(Duration(seconds: 1), (Timer t) {
instances.removeWhere((element) => element.isInvalid);
for (int i = 0; instances.length < executionLimit; i++) {
instances.add(Instance(
Future.delayed(Duration(milliseconds: Random().nextInt(100)))
.then((value) => executedFunctions++)));
}
//tests again
elapsedTime++;
if (elapsedTime % 5 == 0) {
print(executedFunctions);
}
});
}
class Instance {
Future<void> execute;
bool isInvalid = false;
Instance(this.execute) {
execute.then((value) => Timer(
Duration(seconds: apiCallLimitInSeconds), () => isInvalid = true));
}
}

最新更新