acquire method
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;
}