MST

星途 面试题库

面试题:Rust中tokio框架异步任务创建与执行

在Rust中使用tokio框架,如何创建一个简单的异步任务并执行它?请给出具体代码示例,并解释`tokio::spawn`和`await`的作用。
14.5万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. 代码示例
use tokio;

#[tokio::main]
async fn main() {
    let task = tokio::spawn(async {
        println!("异步任务开始执行");
        // 模拟一些异步操作
        tokio::time::sleep(std::time::Duration::from_secs(2)).await;
        println!("异步任务执行结束");
    });

    println!("主线程在异步任务执行时继续执行");

    // 等待异步任务完成
    if let Ok(result) = task.await {
        // 如果任务正常完成,这里可以处理返回值,这里没有返回值所以不处理
        println!("异步任务成功完成");
    } else {
        println!("异步任务出现错误");
    }
}
  1. tokio::spawn的作用tokio::spawn用于在Tokio运行时中创建一个新的异步任务。它接受一个实现了Future trait的异步块,并将其作为一个新的任务调度到Tokio运行时的线程池中执行。这样,主线程在调用tokio::spawn后可以继续执行,而新创建的异步任务会在后台异步运行。例如在上述代码中tokio::spawn(async {... })就创建了一个新的异步任务,这个任务会在后台开始执行println!("异步任务开始执行");等操作。

  2. await的作用await关键字用于暂停当前异步函数的执行,直到被等待的Future完成。它只能在async函数内部使用。在上述代码中,tokio::time::sleep(std::time::Duration::from_secs(2)).await;这行代码中,await使得当前异步任务暂停执行2秒,等待sleep这个Future完成(也就是时间过去2秒)。当Future完成后,await表达式会返回Future的结果(如果有),异步函数会从暂停的地方继续执行。同时,在if let Ok(result) = task.await {... }这里,await等待异步任务task完成,并获取其结果,根据结果判断任务是否成功执行。