Reads bytes from a source.
This trait is analogous to the
std::io::Read trait, but integrates with
the asynchronous task system. In particular, the
Read::read, will automatically queue the current task for wakeup
and return if data is not yet available, rather than blocking the calling
Specifically, this means that the
poll_read function will return one of
Poll::Ready(Ok(()))means that data was immediately read and placed into the output buffer. The amount of data read can be determined by the increase in the length of the slice returned by
ReadBuf::filled. If the difference is 0, EOF has been reached.
Poll::Pendingmeans that no data was read into the buffer provided. The I/O object is not currently readable but may become readable in the future. Most importantly, the current future’s task is scheduled to get unparked when the object is readable. This means that like
Future::pollyou’ll receive a notification when the I/O object is readable again.
Poll::Ready(Err(e))for other errors are standard I/O errors coming from the underlying object.
This trait importantly means that the
read method only works in the
context of a future’s task. The object may panic if used outside of a task.
Utilities for working with
AsyncRead values are provided by
Attempts to read from the
On success, returns
Poll::Ready(Ok(())) and places data in the
unfilled portion of
buf. If no data was read (
unchanged), it implies that EOF has been reached.
If no data is available for reading, the method returns
and arranges for the current task (via
cx.waker()) to receive a
notification when the object becomes readable or is closed.