close method

Future close()

Closes the pool so that no more resources are requested.

Existing resource requests remain unchanged.

Any resources that are marked as releasable using PoolResource.allowRelease are released immediately. Once all resources have been released and any onRelease callbacks have completed, the returned future completes successfully. If any onRelease callback throws an error, the returned future completes with that error.

This may be called more than once; it returns the same Future each time.

Implementation

Future close() => _closeMemo.runOnce(() {
      if (_closeGroup != null) return _closeGroup!.future;

      _resetTimer();

      _closeGroup = FutureGroup();
      for (var callback in _onReleaseCallbacks) {
        _closeGroup!.add(Future.sync(callback));
      }

      _allocatedResources -= _onReleaseCallbacks.length;
      _onReleaseCallbacks.clear();

      if (_allocatedResources == 0) _closeGroup!.close();
      return _closeGroup!.future;
    });