acquire method

Future<T> acquire()

Acquires a resource: reuses an idle one, else creates a new one if below maxSize, else waits FIFO for a release. Prefer use so the matching release can't be forgotten. Throws StateError if the pool is closed. Audited: 2026-06-12 11:26 EDT

Implementation

Future<T> acquire() async {
  if (_isClosed) {
    throw StateError('ResourcePool is closed');
  }
  if (_idle.isNotEmpty) {
    return _idle.removeLast();
  }
  if (_created < maxSize) {
    return await _createTracked();
  }
  final Completer<T> waiter = Completer<T>();
  _waiters.add(waiter);
  return await waiter.future;
}