FCancellationTokenAggregated constructor
FCancellationTokenAggregated(
- List<
FCancellationToken> tokens
Implementation
FCancellationTokenAggregated(List<FCancellationToken> tokens)
: _innerTokens = List.unmodifiable(tokens),
_isCancellationRequested = false {
FCancellationTokenCallback? listener;
listener = (exCancelled) {
for (final innerToken in tokens) {
innerToken.removeCancelListener(listener!);
}
this._isCancellationRequested = true;
const List<FException> errors = [];
if (this._cancelListeners.isNotEmpty) {
// Release callback. We do not need its anymore
final List<FCancellationTokenCallback> cancelListenersCopy =
List.unmodifiable(this._cancelListeners);
this._cancelListeners.clear();
for (var cancelListener in cancelListenersCopy) {
try {
cancelListener(exCancelled);
} catch (e) {
errors.add(FException.wrapIfNeeded(e));
}
}
}
if (errors.isNotEmpty) {
throw FExceptionAggregate(errors);
}
};
for (final innerToken in tokens) {
innerToken.addCancelListener(listener);
}
}