异步任务可以理解成一段能够暂停和继续执行的代码。在 Rust 中任务的暂停和恢复,主要和 Future、poll、Waker 这些概念有关。
前言
很多语言都提供了异步编程的能力,本质上就是在“等结果”的这段时间里,不让线程白白挂住。像 C# 里有 Task 和 async/await,JavaScript 里有 Promise 和 async/await,目的都差不多,就是想让异步逻辑写起来不要那么蛋疼。
Rust 也有 async/await,但它背后的实现思路和其他语言不完全一样。比如下面这个异步函数:
1 | async fn hallo() { |
调用 hallo() 时,并不会立刻执行完整个函数,而是先返回一个 Future。