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
返回的任务执行完毕。