acquire method

Future<void> acquire()

Implementation

Future<void> acquire() async {
  while (true) {
    final now = DateTime.now();
    _timestamps.removeWhere((t) => now.difference(t).inMilliseconds >= 1000);
    if (_timestamps.length < maxPerSecond + burst - 1) break;
    final oldest = _timestamps.first;
    final waitMs = 1000 - now.difference(oldest).inMilliseconds;
    if (waitMs > 0) {
      await Future<void>.delayed(Duration(milliseconds: waitMs));
    }
  }
  _timestamps.add(DateTime.now());
}