面试题答案
一键面试async
关键字作用:async
关键字用于定义一个异步函数。它将一个普通函数转变为异步函数,该函数返回一个实现了Future
trait 的类型。异步函数不会立即执行,而是返回一个Future
,这个Future
代表了异步计算的结果,在适当的时候可以通过.await
来驱动其执行。
await
关键字作用:await
关键字用于暂停当前异步函数的执行,直到其所等待的Future
完成。它只能在async
函数内部使用。当遇到.await
时,当前异步函数的执行被挂起,控制权交回给运行时,运行时可以继续执行其他任务。当被等待的Future
完成后,.await
表达式返回Future
的结果,异步函数恢复执行。
- 示例:简单的异步网络请求操作:
首先,需要添加
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
异步函数执行完成,获取网络请求的结果并进行处理。