Futures
Future — це трейт, реалізований об’єктами, які представляють операцію, яка може бути ще не завершеною.  Ф’ючерс можна опитувати, і poll повертає Poll.
#![allow(unused)] fn main() { use std::pin::Pin; use std::task::Context; pub trait Future { type Output; fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output>; } pub enum Poll<T> { Ready(T), Pending, } }
Асинхронна функція повертає impl Future. Також можливо (але рідко) реалізувати Future для ваших власних типів. Наприклад, JoinHandle, отриманий від tokio::spawn, реалізує Future, щоб дозволити приєднання до нього.
Ключове слово .await, застосоване до Future, змушує поточну асинхронну функцію призупинятися, доки це Future не буде готове, а потім обчислює її вихідні дані.
- 
Типи
FutureтаPollреалізовано саме так, як показано на малюнку; натисніть на лінки, щоб переглянути реалізацію в документації. - 
Ми не будемо переходити до
PinіContext, оскільки ми зосередимося на написанні асинхронного коду, а не на створенні нових асинхронних примітивів. Коротко:- 
Contextдозволяє Future запланувати повторне опитування, при настанні певної події. - 
Pinгарантує, що Future не буде переміщено в пам’яті, тому покажчики на цей ф’ючерс залишатимуться дійсними. Це потрібно, щоб дозволити посиланням залишатися дійсними після.await. 
 -