面试题答案
一键面试在Rust的异步编程中,通常使用Result
类型来处理异步操作过程中可能出现的错误。async
函数本身返回的是一个实现了Future
trait 的类型,而这个Future
在执行完成时也可以返回一个Result
类型来表明成功或失败。
示例如下:
use std::io;
use std::future::Future;
use tokio::task::spawn;
async fn read_input() -> Result<String, io::Error> {
let mut input = String::new();
io::stdin().read_line(&mut input)?;
Ok(input)
}
#[tokio::main]
async fn main() {
let handle = spawn(async {
match read_input().await {
Ok(input) => println!("You entered: {}", input.trim()),
Err(e) => eprintln!("Error: {}", e),
}
});
if let Err(e) = handle.await {
eprintln!("Task error: {}", e);
}
}
在上述代码中:
read_input
是一个异步函数,它尝试从标准输入读取一行文本。如果读取成功,返回Ok(String)
;如果发生错误,返回Err(io::Error)
。这里使用?
操作符来传播错误,如果read_line
调用失败,?
会提前返回错误值给调用者。- 在
main
函数中,使用tokio::task::spawn
创建一个新的异步任务来运行read_input
。在任务内部,通过match
表达式来处理read_input
返回的Result
。如果是Ok
,打印输入内容;如果是Err
,打印错误信息。 - 最后,通过
handle.await
等待任务完成,并处理任务执行过程中可能出现的错误。如果任务执行出错,打印错误信息。