request method

Future<PoolResource> request()

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