#include <userver/engine/task/task_base.hpp>
Base class for all the asynchronous tasks (engine::Task, engine::SharedTask, engine::SharedTaskWithResult, engine::TaskWithResult, dist_lock::DistLockedTask, ...).
Definition at line 33 of file task_base.hpp.
Inheritance diagram for engine::TaskBase:Public Types | |
| enum class | Importance { kNormal , kCritical } |
| Task importance. More... | |
| enum class | State { kInvalid , kNew , kQueued , kRunning , kSuspended , kCancelled , kCompleted } |
| Task state. More... | |
| enum class | WaitMode { kSingleAwaiter , kMultipleAwaiters } |
| Task wait mode. More... | |
Public Member Functions | |
| bool | IsValid () const |
| Checks whether this object owns an actual task (not State::kInvalid) | |
| State | GetState () const |
| Gets the task State. | |
| bool | IsFinished () const |
| Returns whether the task finished execution. | |
| void | Wait () const noexcept(false) |
| Suspends execution until the task finishes or caller is cancelled. Can be called from coroutine context only. For non-coroutine context use BlockingWait(). | |
| template<typename Rep, typename Period> | |
| void | WaitFor (const std::chrono::duration< Rep, Period > &) const noexcept(false) |
| Suspends execution until the task finishes or after the specified timeout or until caller is cancelled. | |
| template<typename Clock, typename Duration> | |
| void | WaitUntil (const std::chrono::time_point< Clock, Duration > &) const noexcept(false) |
| Suspends execution until the task finishes or until the specified time point is reached or until caller is cancelled. | |
| void | WaitUntil (Deadline) const |
| Suspends execution until the task finishes or until the specified deadline is reached or until caller is cancelled. | |
| bool | WaitNothrow () const noexcept |
| Suspends execution until the task finishes or caller is cancelled. Can be called from coroutine context only. For non-coroutine context use BlockingWait(). | |
| FutureStatus | WaitNothrowUntil (Deadline) const noexcept |
| Suspends execution until the task finishes or until the specified deadline is reached or until caller is cancelled. | |
| void | RequestCancel () |
| Queues task cancellation request. | |
| void | SyncCancel () noexcept |
| Cancels the task and suspends execution until it is finished. Can be called from coroutine context only. For non-coroutine context use RequestCancel() + BlockingWait(). | |
| TaskCancellationReason | CancellationReason () const |
| Gets task cancellation reason. | |
| void | BlockingWait () const |
Static Public Member Functions | |
| static std::string_view | GetStateName (State state) |
|
strong |
Task importance.
Definition at line 36 of file task_base.hpp.
|
strong |
Task state.
| Enumerator | |
|---|---|
| kInvalid | Unusable. |
| kNew | just created, not registered with task processor |
| kQueued | awaits execution |
| kRunning | executing user code |
| kSuspended | suspended, e.g. waiting for blocking call to complete |
| kCancelled | The task is cancelled and was finished without returning a value or throwing a user-provided exception. This can happen for two reasons:
In both cases, engine::TaskWithResult::Get throws engine::TaskCancelledException. Unintuitively, this status is not set when the task was cancelled after it started running, which caused the user code to exit early. Use TaskBase::CancellationReason instead to check whether the task was cancelled. |
| kCompleted | Exited user code with return or throw. This includes cases where the task was cancelled after it started running, which caused the user code to exit early. Use TaskBase::IsFinished instead to check whether the task finished execution. |
Definition at line 48 of file task_base.hpp.
|
strong |
Task wait mode.
| Enumerator | |
|---|---|
| kSingleAwaiter | Can be awaited by at most one task at a time. |
| kMultipleAwaiters | Can be awaited by multiple tasks simultaneously. |
Definition at line 85 of file task_base.hpp.
| void engine::TaskBase::BlockingWait | ( | ) | const |
Waits for the task in non-coroutine context (e.g. non-TaskProcessor's std::thread).
| bool engine::TaskBase::IsValid | ( | ) | const |
Checks whether this object owns an actual task (not State::kInvalid)
An invalid task cannot be used. The task becomes invalid after each of the following calls:
Notably, the task does not become invalid immediately after it finishes execution. (That would always cause race conditions when trying to await a task.) It means that some of the task's resources are held onto until the task object is invalidated or destroyed.
| void engine::TaskBase::Wait | ( | ) | const |
Suspends execution until the task finishes or caller is cancelled. Can be called from coroutine context only. For non-coroutine context use BlockingWait().
| WaitInterruptedException | when current_task::IsCancelRequested() and no TaskCancellationBlockers are present. |
| void engine::TaskBase::WaitFor | ( | const std::chrono::duration< Rep, Period > & | duration | ) | const |
Suspends execution until the task finishes or after the specified timeout or until caller is cancelled.
| WaitInterruptedException | when current_task::IsCancelRequested() and no TaskCancellationBlockers are present. |
Definition at line 210 of file task_base.hpp.
|
nodiscardnoexcept |
Suspends execution until the task finishes or caller is cancelled. Can be called from coroutine context only. For non-coroutine context use BlockingWait().
false when current_task::IsCancelRequested() and no TaskCancellationBlockers are present.
|
nodiscardnoexcept |
Suspends execution until the task finishes or until the specified deadline is reached or until caller is cancelled.
current_task::IsCancelRequested() and no TaskCancellationBlockers are present. | void engine::TaskBase::WaitUntil | ( | const std::chrono::time_point< Clock, Duration > & | until | ) | const |
Suspends execution until the task finishes or until the specified time point is reached or until caller is cancelled.
| WaitInterruptedException | when current_task::IsCancelRequested() and no TaskCancellationBlockers are present. |
Definition at line 215 of file task_base.hpp.
| void engine::TaskBase::WaitUntil | ( | Deadline | ) | const |
Suspends execution until the task finishes or until the specified deadline is reached or until caller is cancelled.
| WaitInterruptedException | when current_task::IsCancelRequested() and no TaskCancellationBlockers are present. |
|
friend |
Definition at line 203 of file task_base.hpp.