MST

星途 面试题库

面试题:网络编程之Rust异步编程基础

在Rust语言的异步编程模型中,简要描述`async`和`await`关键字的作用,并举例说明如何使用它们来实现一个简单的异步网络请求操作。
19.1万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试
  1. async关键字作用
    • async关键字用于定义一个异步函数。它将一个普通函数转变为异步函数,该函数返回一个实现了Future trait 的类型。异步函数不会立即执行,而是返回一个Future,这个Future代表了异步计算的结果,在适当的时候可以通过.await来驱动其执行。
  2. await关键字作用
    • await关键字用于暂停当前异步函数的执行,直到其所等待的Future完成。它只能在async函数内部使用。当遇到.await时,当前异步函数的执行被挂起,控制权交回给运行时,运行时可以继续执行其他任务。当被等待的Future完成后,.await表达式返回Future的结果,异步函数恢复执行。
  3. 示例:简单的异步网络请求操作: 首先,需要添加reqwest库来进行网络请求,在Cargo.toml中添加:
    [dependencies]
    reqwest = { version = "0.11", features = ["async"] }
    
    然后编写如下代码:
    use reqwest;
    
    async fn fetch_data() -> Result<String, reqwest::Error> {
        let response = reqwest::get("https://www.example.com").await?;
        let body = response.text().await?;
        Ok(body)
    }
    
    #[tokio::main]
    async fn main() {
        match fetch_data().await {
            Ok(data) => println!("Fetched data: {}", data),
            Err(e) => eprintln!("Error: {}", e),
        }
    }
    
    在上述代码中:
    • fetch_data是一个异步函数,使用async关键字定义。
    • reqwest::get("https://www.example.com").await这里的.await暂停fetch_data函数的执行,直到网络请求完成,获取到响应。
    • response.text().await同样使用.await等待从响应中读取文本内容。
    • main函数中,fetch_data().await等待fetch_data异步函数执行完成,获取网络请求的结果并进行处理。