Tokio

Tokio provides:

  • 用于执行异步代码的多线程运行时。
  • An asynchronous version of the standard library.
  • 庞大的库生态系统。
  1. use tokio::time;
  2. async fn count_to(count: i32) {
  3. for i in 1..=count {
  4. println!("Count in task: {i}!");
  5. time::sleep(time::Duration::from_millis(5)).await;
  6. }
  7. }
  8. #[tokio::main]
  9. async fn main() {
  10. tokio::spawn(count_to(10));
  11. for i in 1..5 {
  12. println!("Main task: {i}");
  13. time::sleep(time::Duration::from_millis(5)).await;
  14. }
  15. }
  • 借助 tokio::main 宏,我们现在可以将 main 设为异步函数。

  • spawn 函数会创建新的并发 “任务”。

  • 注意:spawn 使用 Future 方法实现,而不是对 count_to 调用 .await

深入探索

  • 为何 count_to 通常无法计数到 10?这是一个异步取消的示例。tokio::spawn 会返回一个句柄,可以等待该句柄直至其代表的任务执行完毕。

  • 尝试使用 count_to(10).await,而不是派生方法。

  • 尝试等待 tokio::spawn 返回的任务执行完毕。