Struct hyper::ffi::hyper_task
source · pub struct hyper_task { /* private fields */ }
ffi
and hyper_unstable_ffi
only.Expand description
An async task.
A task represents a chunk of work that will eventually yield exactly one
hyper_task_value
. Tasks are pushed onto an executor, and that executor is
responsible for calling the necessary private functions on the task to make
progress. In most cases those private functions will eventually cause read
or write callbacks on a hyper_io
object to be called.
Tasks are created by various functions:
- hyper_clientconn_handshake: Creates an HTTP client handshake task.
- hyper_clientconn_send: Creates a task to send a request on the client connection.
- hyper_body_data: Creates a task that will poll a response body for the next buffer of data.
- hyper_body_foreach: Creates a task to execute the callback with each body chunk received.
Tasks then have a userdata associated with them using `hyper_task_set_userdata``. This is important, for instance, to associate a request id with a given request. When multiple tasks are running on the same executor, this allows distinguishing tasks for different requests.
Tasks are then pushed onto an executor, and eventually yielded from hyper_executor_poll:
- hyper_executor_push: Push a task onto the executor.
- hyper_executor_poll: Polls the executor, trying to make progress on any tasks that have notified that they are ready again.
Once a task is yielded from poll, retrieve its userdata, check its type, and extract its value. This will require a case from void* to the appropriate type.
Methods on hyper_task:
- hyper_task_type: Query the return type of this task.
- hyper_task_value: Takes the output value of this task.
- hyper_task_set_userdata: Set a user data pointer to be associated with this task.
- hyper_task_userdata: Retrieve the userdata that has been set via hyper_task_set_userdata.
- hyper_task_free: Free a task.