Part of what makes Dart great is its excellent async support, but it is in dire need of a unified mechanism for cancellation.
Currently, there are a variety of inconsistent cancellation APIs for different operations (e.g. ConnectionTask for Socket.startConnect(), StreamSubscription.cancel(), HttpClientRequest.abort()), and some lack any cancellation support at all (most notoriously, HttpClient.getUrl() as noted in dart-lang/sdk#51267). The facilities to write your own cancellable operations (CancelableCompleter to build a [CancelableOperation