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