cancellation_token 2.0.1
cancellation_token: ^2.0.1 copied to clipboard
Easy async task cancellation for tasks using cancellation tokens in Dart.
2.0.1 #
- Fixed a
Bad state: Future already completedexception that could occur when nesting cancellable futures.
2.0.0 #
This release aims to make it easier to implement custom Cancellables and provide more useful information for debugging.
- Added a
.cancelWithReason()method toCancellationTokenfor a convenient way to set provide a cancellation reason for debugging. CancelledExceptionnow overrides.toString()to give a more useful message for debugging, including the cancellation reason.- Cancellation stack traces now show the call stack leading up to the operation that was cancelled, rather than the call stack leading up to the token's cancellation. This should make it easier to identify the origin of uncaught cancellation exceptions.
- Added a
.detach()method to theCancellablemixin. When paired with.maybeAttach(), this will detach your cancellable from the token. - Fixed a bug where the
ignoreCancellation()wouldn't callwhenCompleteifonErrorthrew an exception. - Fixed a bug where
asCancellable()could result in uncaught exceptions.
Breaking changes #
These changes are isolated to projects using custom cancellables or cancellation tokens. Other projects are unaffected.
- The
CancellationToken.attach()and.detach()methods have been renamed to.attachCancellable()and.detachCancellable(). - The
CancellationToken.exceptiongetter now returns null if the token hasn't been cancelled yet. - The
CancellationToken.cancel()method'sexceptionparameter is now nullable, rather than using a default value. - Removed the
[StackTrace? stackTrace]parameter from theCancellablemixin'sonCancelmethod. Instead, use the newcancellationStackTrace, which returns the stack trace at the time the cancellable was created. - Overridden
Cancellablemixin methods must now call super.
To migrate your custom cancellation tokens: #
- If you're overriding the
.attach()and.detach()methods, rename them to.attachCancellable()and.detachCancellable(). - If you're overriding
.exception, update it to be nullable and only return an exception if the token's been cancelled. - If you're overriding
.cancel(), update it to make theexceptionparameter nullable. If you were previously setting a default value, consider setting this within the method instead:@override void cancel([Exception? exception]) { exception ??= YourCustomDefaultException(); super.cancel(exception); }
To migrate your custom cancellables: #
- Replace calls to
cancellationToken.attach(this)withmaybeAttach(cancellationToken). - Replace calls to
cancellationToken.detach(this)withdetach(). - Update
onCancel()overrides to callsuper.onCancel()and remove thestackTraceparameter. To get the stack trace, usecancellationStackTraceinstead:// Old @override void onCancel(Exception cancelException, [StackTrace? stackTrace]) { _internalCompleter.completeError( cancelException, stackTrace ?? StackTrace.current, ); } // New @override void onCancel(Exception cancelException) { super.onCancel(cancelException); _internalCompleter.completeError(cancelException, cancellationStackTrace); }
1.6.1 #
- Include Dart SDK license in license file.
1.6.0 #
- Added
CancellableIsolate.run(), based on the newIsolate.run()method in Dart 2.19.0. - Updated
cancellableComputeto useCancellableIsolate.run()internally. - Increased minimum Dart SDK to 2.19.0.
1.5.0 #
- Added
MergedCancellationTokento combine multiple cancellation tokens into one. - Added
cancellableFutureOr()to simplify cancellation when working withFutureOrtypes. - Added
onError,whenComplete, andwhenCompleteOrCancelledparams toignoreCancellation(). This change doesn't impact existing usage.
1.4.0 #
- Added new static functions to
CancellableFutureto make the API more similar to Dart'sFuture:Future()➡️CancellableFuture.from()Future.microtask()➡️CancellableFuture.microtask()Future.sync()➡️CancellableFuture.sync()Future.value()➡️CancellableFuture.value()Future.delayed()➡️CancellableFuture.delayed()
- Breaking: The
CancellableFutureconstructor is now private. Calls to this constuctor should be replaced with.asCancellable()orCancellableFuture.value():// Removed: // await CancellableFuture(exampleFuture, cancellationToken).future; // Recommended: await exampleFuture.asCancellable(cancellationToken); - Updated
cancellableComputewith the latest changes from the Flutter SDK'scomputefunction (see flutter/flutter#99527).
1.3.4 #
- Rename the
onCancelmethod'straceparameter tostackTrace. - Add Cancellation Token HTTP example to README.
1.3.3 #
- Fix CancellableCompute web implementation.
1.3.2 #
- Added
hasCancellablesto CancellationToken.
1.3.1 #
- Bugfix: Fix exception if a Cancellable calls
cancellationToken.detach(this)in itsonCancelmethod.
1.3.0 #
- Added
CancellableCompleter.syncconstructor to match Dart's Completer. - Added
ignoreCancellations()convenience function for silently catching cancellation exceptions. - Added example project.
- StackTraces are now included when cancelling (experimental).
- Bugfix: Calling the
.exceptiongetter on a CancellationToken will no longer create a new CancelledException instance every time. - Bugfix: Fixed uncaught exceptions.
1.2.0 #
- Added support for nullable CancellationTokens, allowing functions/classes to be made cancellable without breaking existing implementations.
1.1.1 #
- Bugfix: Add missing cancellableCompute export.
1.1.0 #
- Added
cancellableCompute()for running isolates that can be killed using a CancellationToken. - Increased minimum Dart SDK to 2.15.0.
1.0.0 #
Initial release