use std::future::Future; use std::pin::Pin; use std::task::{Context, Poll}; #[tokio::main] async fn main() { invoke().await } struct FutureImpl { i: i32, } impl Future for FutureImpl { type Output = (); fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { if self.i == 0 { let s = &mut *self; s.i += 1; println!("Hello World, pending"); cx.waker().wake_by_ref(); Poll::Pending } else { println!("Hello World, ready"); Poll::Ready(()) } } } fn invoke() -> impl Future { FutureImpl { i: 0, } }