如何实现根据运行时间限制方法执行次数?

How to achieve a limited number of method executions based on elapsed time?

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

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

如果我在循环中发送“hello world”,我将超过该限制。

例如,像这样:

ExecutionLimiter executer = ExecutionLimiter(executions: 100, duration: Duration(minutes: 1));

while (true) {
  executer.add(() => print(“hello world“));
}

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

感谢您的帮助。

您可以使用 Timer.periodic 在每个给定时间激活一个方法。

_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();
});

只是不要忘记将它保存在变量中,并在使用完后将其丢弃。

感谢 的支持,我创建了一个简短的示例程序,在给定的时间跨度内执行函数 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));
  }
}