在「Rust学习笔记 - Future、Waker 与异步任务调度」中提到过,Future 可以看作一个状态机。它会保存当前执行到了哪里、后续需要哪些局部变量,以及正在等待什么。
前言
async/await 可以让异步代码看起来像普通的顺序代码:
1 | use tokio::time::{sleep, Duration}; |
这段代码先输出 start,等待 1 秒后再输出 finished。等待期间,run() 对应的 Future 会返回 Poll::Pending,执行到这里暂停。
定时器到期后,运行时会再次调用这个 Future 的 poll。这次不会重新输出 start,而是从 sleep(...).await 后面继续执行。
那么,Future 是怎么记住上次执行到哪里呢?