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