request method
Request a PoolResource
.
If the maximum number of resources is already allocated, this will delay until one of them is released.
Implementation
Future<PoolResource> request() {
if (isClosed) {
throw StateError('request() may not be called on a closed Pool.');
}
if (_allocatedResources < _maxAllocatedResources) {
_allocatedResources++;
return Future.value(PoolResource._(this));
} else if (_onReleaseCallbacks.isNotEmpty) {
return _runOnRelease(_onReleaseCallbacks.removeFirst());
} else {
var completer = Completer<PoolResource>();
_requestedResources.add(completer);
_resetTimer();
return completer.future;
}
}