cancel method
Implementation
Future<void> cancel() {
final existing = _cancelling;
if (existing != null) return existing;
if (_ended) return Future<void>.value();
_cancelled = true;
final completion = Completer<void>();
_cancelling = completion.future;
completion.complete(Future<void>.sync(_close!).whenComplete(_finish));
return completion.future;
}