#include <coro_or_else_task.h>
Public Member Functions | |
CoroOrElseTask (Coro< Status > &&coro, pw::Function< void(Status)> &&or_else) | |
void | SetCoro (Coro< Status > &&coro) |
void | SetErrorHandler (pw::Function< void(Status)> &&or_else) |
![]() | |
Task (const Task &)=delete | |
Task (Task &&)=delete | |
Task & | operator= (const Task &)=delete |
Task & | operator= (Task &&)=delete |
Poll | Pend (Context &cx) |
bool | IsRegistered () const |
void | Deregister () |
void | Destroy () |
Private Member Functions | |
Poll | DoPend (Context &cx) final |
A Task
that delegates to a provided Coro<Status>>
and executes an or_else
handler function on failure.
|
inline |
Create a new Task
which runs coro
, invoking or_else
on any non-OK status.
Attempts to advance this Task
to completion.
This method should not perform synchronous waiting, as doing so may block the main Dispatcher
loop and prevent other Task
s from progressing. Because of this, Task
s should not invoke blocking Dispatcher
methods such as RunUntilComplete
.
Task
s should also avoid invoking RunUntilStalled` on their own
Dispatcher``.
Returns Ready
if complete, or Pending
if the Task
was not yet able to complete.
If Pending
is returned, the Task
must ensure it is woken up when it is able to make progress. To do this, Task::Pend
must arrange for Waker::Wake
to be called, either by storing a copy of the Waker
away to be awoken by another system (such as an interrupt handler).
Implements pw::async2::Task.
Non-atomically sets coro
.
The task must not be Post
ed when coro
is changed.
|
inline |
Non-atomically sets or_else
.
The task must not be Post
ed when or_else
is changed.