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