-
Notifications
You must be signed in to change notification settings - Fork 22
Open
Labels
Description
Currently, there's no way a Task can be cancelled. It is useful in the cases where an activity/orchestrator initiates multiple tasks and wants to cancel the tasks based on some conditions.
It would be great to have an API to cancel a running task -
class Task(ABC, Generic[T]):
"""Abstract base class for asynchronous tasks in a durable orchestration."""
_result: T
_exception: Optional[TaskFailedError]
_parent: Optional[CompositeTask[T]]
def __init__(self) -> None:
super().__init__()
self._is_complete = False
self._exception = None
self._parent = None
@property
def is_complete(self) -> bool:
"""Returns True if the task has completed, False otherwise."""
return self._is_complete
@property
def is_failed(self) -> bool:
"""Returns True if the task has failed, False otherwise."""
return self._exception is not None
def get_result(self) -> T:
"""Returns the result of the task."""
if not self._is_complete:
raise ValueError('The task has not completed.')
elif self._exception is not None:
raise self._exception
return self._result
def get_exception(self) -> TaskFailedError:
"""Returns the exception that caused the task to fail."""
if self._exception is None:
raise ValueError('The task has not failed.')
return self._exception