MST

星途 面试题库

面试题:Rust异步编程之任务创建与等待

在Rust的async/await异步编程中,如何创建一个简单的异步任务,并等待其执行完成?请给出具体代码示例,并解释`async`函数和`await`关键字在其中的作用。
10.2万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

代码示例

use std::time::Duration;

async fn async_task() {
    // 模拟异步操作,这里使用`tokio::time::sleep`
    tokio::time::sleep(Duration::from_secs(2)).await;
    println!("异步任务执行完成");
}

#[tokio::main]
async fn main() {
    // 创建异步任务
    let task = async_task();
    // 等待异步任务执行完成
    task.await;
    println!("主线程等待异步任务结束后继续执行");
}

async函数和await关键字的作用

  1. async函数
    • async关键字用于定义异步函数。异步函数返回一个实现了Future trait的值。在上述代码中,async fn async_task()定义了一个异步任务,这个任务内部模拟了一个异步操作(通过tokio::time::sleep)。异步函数并不会立即执行其中的代码,而是返回一个Future,只有当这个Future.await或通过其他方式驱动时才会真正执行。
  2. await关键字
    • await关键字用于暂停当前异步函数的执行,直到其等待的Future完成。在async_task函数中,tokio::time::sleep(Duration::from_secs(2)).await;这行代码中,await使得async_task函数暂停执行,直到tokio::time::sleep所代表的异步操作(睡眠2秒)完成。在main函数中,task.await;等待async_task返回的Future执行完毕,只有当async_task任务完成后,main函数才会继续执行后续的代码。

注意,上述代码使用了tokio运行时,需要在Cargo.toml文件中添加tokio = { version = "1", features = ["full"] }依赖。