面试题答案
一键面试常见错误类型
- 通道关闭错误:当通道的发送端或接收端关闭后,继续进行发送或接收操作会导致错误。例如,接收端已经关闭,发送端继续发送数据就会出现这种情况。
- 资源耗尽错误:在无界通道中,如果发送速度远大于接收速度,可能导致内存耗尽。在有界通道中,如果缓冲区已满,继续发送数据会失败。
tokio::sync::mpsc
通道发送和接收操作的基本错误处理示例
use tokio::sync::mpsc;
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
// 创建一个有界通道
let (tx, mut rx) = mpsc::channel(10);
// 尝试发送数据
let send_result = tx.send(42).await;
match send_result {
Ok(_) => println!("数据发送成功"),
Err(e) => eprintln!("发送数据失败: {}", e),
}
// 尝试接收数据
let receive_result = rx.recv().await;
match receive_result {
Some(data) => println!("接收到数据: {}", data),
None => eprintln!("通道已关闭,无数据可接收"),
}
Ok(())
}
在上述代码中:
- 发送操作:使用
tx.send(42).await
发送数据,通过match
语句处理send
操作返回的Result
,如果Ok
表示发送成功,Err
则打印错误信息。 - 接收操作:使用
rx.recv().await
接收数据,通过match
语句处理recv
操作返回的Option
,Some
表示接收到数据,None
表示通道已关闭且无数据可接收。