close method

Future<void> close()

Close this HTTP handler.

Returns the same future as done.

Implementation

Future<void> close() {
  Future<void> doClose() async {
    _isClosed = true;

    // Timers associated with these completers will be cancelled in
    // the finally block from the try/catch that the completer is awaited in.
    for (final completer in _pendingRateLimits) {
      completer.completeError(ClientClosedError());
    }

    httpClient.close();
    _onRequestController.close();
    _onResponseController.close();
    _onRateLimitController.close();
  }

  if (!_isClosed) {
    final closeFuture = doClose();
    if (!_doneCompleter.isCompleted) {
      _doneCompleter.complete(closeFuture);
    } else {
      closeFuture.ignore();
    }
  }

  assert(_doneCompleter.isCompleted);
  return _doneCompleter.future;
}