Cancelation Tokens
Pre-release
Pre-release
API changes
- Added
Proto.Promises.{CancelationSource, CancelationToken, CancelationRegistration}
structs which can be used for synchronous cancelation callbacks. - Added optional
CancelationToken
parameter toPromise.{Then, Catch, CatchCancelation, ContinueWith, Progress, Sequence, NewDeferred}
. - Changed Deferreds to structs with an implicit cast to DeferredBase (
DeferredBase.ToDeferred(<T>)()
to cast back explicitly). - Removed
DeferredBase.Cancel
, replaced with the cancelation token. - Removed
Promise.{Cancel, ThenDuplicate}
. - Removed
Proto.Logger
, replaced it withPromise.Config.WarningHandler
.
Behavior changes
- Changed
Promise.First
to suppress rejections from any promises passed in that did not result in the rejection of the returned promise. - Change
Deferred.Reject(null)
to convert to aNullReferenceException
on anyT
. This meansPromise.Catch<T>
will never give a null value. This more closely matches normalthrow null;
behavior. CancelationSource.Cancel(null)
now converts cancelation to a non-value. This mean ifPromise.ReasonContainer.ValueType
is not null,Promise.ReasonContainer.Value
is also not null, and ifPromise.ReasonContainer.TryGetValue<T>
succeeds, the value will not be null.- Removed requirement to include
Proto.Promises.Await
for awaiting promises in an async function. - Check to make sure
RethrowException
is used properly, change toInvalidOperationException
if not.
Optimizations
- Deferreds are now structs, removing the memory overhead of classes.
- Added a static cached
Promise.Canceled()
void in RELEASE mode. - When canceled, promises are now unlinked from their previous.
- No longer check if promise is canceled when doing internal operations.
- Removed internal skipFrame calculations since that's now handled in
Internal.FormatStackTrace
in DEBUG mode. - Pass by ref to pass large structs around internally more efficiently.
- Less memory used in Promise objects with
onRejected
callbacks. PromiseMethodBuilder
cachesstateMachine.MoveNext
directly instead of lambda capturing.
Misc
- Removed recursive type definitions so that Unity 2019.1.14 and older on .Net 4.X scripting runtime version will compile.
- Removed PROTO_PROMISE_CANCEL_DISABLE preprocessor checks since cancelations no longer slow down normal execution.
- No longer check for internal promise invoking when accessing
Promise.{RejectException, CancelException}
. - Renamed asmdefs to include Proto in the names. Removed Utilities.asmdef.
Known Issues
- A
Promise.Progress
callback subscribed to a promise chain where the chain is broken by a cancelation token and continued withPromise.ContinueWith
reports incorrect progress (introduced in v 0.9 withPromise.ContinueWith
).