Tokio
Tokio provides:
- 用于执行异步代码的多线程运行时。
- An asynchronous version of the standard library.
- 庞大的库生态系统。
use tokio::time; async fn count_to(count: i32) { for i in 1..=count { println!("Count in task: {i}!"); time::sleep(time::Duration::from_millis(5)).await; } } #[tokio::main] async fn main() { tokio::spawn(count_to(10)); for i in 1..5 { println!("Main task: {i}"); time::sleep(time::Duration::from_millis(5)).await; } }
-
借助
tokio::main宏,我们现在可以将main设为异步函数。 -
spawn函数会创建新的并发 “任务”。 -
注意:
spawn使用Future方法实现,而不是对count_to调用.await。
深入探索:
-
为何
count_to通常无法计数到 10?这是一个异步取消的示例。tokio::spawn会返回一个句柄,可以等待该句柄直至其代表的任务执行完毕。 -
尝试使用
count_to(10).await,而不是派生方法。 -
尝试等待
tokio::spawn返回的任务执行完毕。