Struct hyper::ffi::hyper_task

source ·
pub struct hyper_task { /* private fields */ }
Available on crate feature 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.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more