close method

Future<void> close({
  1. bool drainWrites = true,
})

Closes resources and, when owned, the configured persistence backend.

Repeated calls return the same completion future.

Implementation

Future<void> close({bool drainWrites = true}) {
  final existing = _closeFuture;
  if (existing != null) {
    return existing;
  }
  _isClosed = true;
  final completion = Completer<void>();
  final future = completion.future;
  _closeFuture = future;
  try {
    final trace = _trace(KacheEventTrigger.close);
    final span = trace.span(KacheEventKind.close)..start();
    unawaited(
      _performClose(drainWrites: drainWrites, span: span).then<void>(
        (_) => completion.complete(),
        onError: (Object error, StackTrace stackTrace) {
          completion.completeError(error, stackTrace);
        },
      ),
    );
  } on Object catch (error, stackTrace) {
    completion.completeError(error, stackTrace);
  }
  return future;
}