面试题答案
一键面试use tokio;
use std::time::Duration;
#[tokio::main]
async fn main() {
let task1 = tokio::spawn(async move {
loop {
println!("Task 1 is running");
tokio::time::sleep(Duration::from_secs(1)).await;
}
});
let task2 = tokio::spawn(async move {
loop {
println!("Task 2 is running");
tokio::time::sleep(Duration::from_secs(2)).await;
}
});
tokio::time::sleep(Duration::from_secs(5)).await;
task1.abort();
task2.abort();
}
tokio::spawn
的作用
tokio::spawn
用于在Tokio运行时中创建并启动一个新的异步任务。它接收一个实现了Future
trait的异步块或函数,并将其作为一个独立的任务调度到Tokio运行时中执行。这样可以让多个异步任务并发执行,提高程序的执行效率。例如上述代码中,tokio::spawn(async move {... })
分别创建了两个异步任务task1
和task2
,这两个任务会在Tokio运行时的调度下并发运行。
await
的作用
await
用于暂停当前异步函数的执行,直到其所等待的Future
完成。当遇到await
时,异步函数会将控制权交回给Tokio运行时,运行时可以调度其他任务执行。一旦所等待的Future
完成,await
表达式会返回Future
的结果,异步函数继续从暂停的地方执行。比如在tokio::time::sleep(Duration::from_secs(1)).await;
这行代码中,await
使得当前任务暂停执行1秒,在这1秒内,Tokio运行时可以调度其他任务,1秒后任务恢复执行并继续后续代码。