`Poll<T>` is the result of calling `Future::poll`: `Poll::Pending` means the future cannot produce a value yet; `Poll::Ready(value)` carries its completed output. The Tokio executor calls `poll` to drive a future toward completion. section 10.3 section 10.4
pub trait Future {
type Output;
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output>;
}
The `Future` trait signature shows where `Poll<Self::Output>` fits: `poll` receives a pinned future and a task context, then reports pending or ready. section 10.3
A custom future must connect its result to a wakeup:
- Return `Poll::Pending` when the output is unavailable. Register or retain a waker so the task can be polled again when that changes. section 10.4
- Return `Poll::Ready(value)` once the output is available. Waking on every pending poll without making progress instead causes repeated polling. section 10.4
Expiration timer
An `AsyncTimer` future stores an expiration time. Its `poll` returns `Poll::Pending` while the deadline is ahead, arranging for a sleeping thread to wake the task. After that wakeup, the executor polls again; the expired timer returns `Poll::Ready` with a `String`. Other tasks can run while the timer is pending. section 10.5

