面试题答案
一键面试use std::thread;
use std::sync::mpsc;
use std::io::{self, Write};
fn main() {
let (sender, receiver) = mpsc::channel();
let handle = thread::spawn(move || {
let result = some_function_that_might_fail();
if let Err(e) = result {
sender.send(Err(e)).unwrap();
} else {
sender.send(Ok(result.unwrap())).unwrap();
}
});
match receiver.recv() {
Ok(Ok(data)) => println!("Success: {:?}", data),
Ok(Err(e)) => println!("Error in thread: {:?}", e),
Err(e) => println!("Error receiving result: {:?}", e),
}
handle.join().unwrap();
}
fn some_function_that_might_fail() -> Result<String, io::Error> {
let mut input = String::new();
io::stdout().write_all(b"Enter something: ").unwrap();
io::stdin().read_line(&mut input)?;
Ok(input.trim().to_string())
}
在上述代码中:
- 使用
mpsc::channel
创建了一个通道用于线程间通信。 - 在新线程中执行可能会返回错误的函数
some_function_that_might_fail
,如果函数执行失败,通过通道发送Err
,如果成功则发送Ok
。 - 在主线程中通过
receiver.recv()
接收结果,并对结果进行匹配处理,分别处理成功和失败的情况。 - 最后通过
handle.join()
等待新线程执行结束,确保程序在新线程完成后才退出。