FCancellationTokenAggregated constructor

FCancellationTokenAggregated(
  1. 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);
  }
}