acquire method

Future<void> acquire()

Waits for a permit, then acquires it (decrements available count). Completes when a permit is available. Throws Object if the underlying future completes with an error.

Implementation

Future<void> acquire() async {
  if (_available > 0) {
    _available--;
    return;
  }
  final Completer<void> c = Completer<void>();

  _waiters.add(() => c.complete());
  try {
    await c.future;
  } on Object catch (e, st) {
    if (!c.isCompleted) c.completeError(e, st);
    rethrow;
  }
  _available--;
}