run method

CancelableOperation<T> run({
  1. OnTaskEvent? onEvent,
})

Runs the task operation and returns the result

Implementation

CancelableOperation<T> run({OnTaskEvent? onEvent}) {
  if (_operation != null) {
    _operation?.cancel();
    _operation = null;
  }

  void onValue(T value) {
    result = TaskResult(value: value);
    _status = TaskStatus.completed;
    onEvent?.call(TaskCompleted(this));
  }

  void onError(error, StackTrace stackTrace) {
    if (status != TaskStatus.cancelled) {
      if (error is E) {
        result = TaskResult(error: error, stackTrace: stackTrace);
      }

      _status = TaskStatus.failed;
      onEvent?.call(TaskFailed(this, error, stackTrace));
    }
  }

  void onCancel() {
    result = null;
    if (status != TaskStatus.cancelled) {
      _status = TaskStatus.cancelled;
      onEvent?.call(TaskCancelled(this));
    }
  }

  result = null;
  _operation = CancelableOperation.fromFuture(execute())
    ..then(
      onValue,
      onError: onError,
      onCancel: onCancel,
    );

  return _operation!;
}