面试题答案
一键面试以下是使用async
和await
关键字构建简单异步任务的Rust代码示例:
use std::time::Duration;
async fn async_task() {
println!("异步任务开始");
// 模拟一些异步操作,这里使用`tokio::time::sleep`
tokio::time::sleep(Duration::from_secs(2)).await;
println!("异步任务结束");
}
#[tokio::main]
async fn main() {
println!("主线程开始");
async_task().await;
println!("主线程结束");
}
代码解释
async fn async_task()
:- 使用
async fn
定义了一个异步函数async_task
。这个函数内部可以包含await
表达式,用于暂停函数执行,直到关联的Future完成。
- 使用
println!("异步任务开始");
:- 在异步任务开始时打印一条信息,表明任务启动。
tokio::time::sleep(Duration::from_secs(2)).await;
:tokio::time::sleep
返回一个Future
,它会在指定的时间(这里是2秒)后完成。await
关键字暂停async_task
函数的执行,直到这个Future
完成,即等待2秒。
println!("异步任务结束");
:- 在
await
完成后,打印信息表明异步任务结束。
- 在
#[tokio::main]
:- 这是一个Tokio提供的宏,它会自动设置Tokio运行时,并将
main
函数标记为异步函数入口点。
- 这是一个Tokio提供的宏,它会自动设置Tokio运行时,并将
async fn main()
:- 异步的
main
函数,在Rust中使用Tokio时,main
函数通常需要是异步的。
- 异步的
async_task().await;
:- 调用异步函数
async_task
,并使用await
等待它完成。这使得main
函数在async_task
完成之前保持暂停状态。
- 调用异步函数
println!("主线程开始");
和println!("主线程结束");
:- 打印信息来表明主线程的执行过程。
println!("主线程开始");
在调用async_task
之前执行,println!("主线程结束");
在async_task
完成后执行。
- 打印信息来表明主线程的执行过程。