我正在编写我的第一个 Rust 程序,但遇到了恐慌。代码一直运行到恐慌评论,我在这里错过了什么明显的东西吗?
fn print_num(n:i32)
{
println!("Hi! {}", n);
}
fn main()
{
let (s, r) = std::sync::mpsc::channel();
let (s1, r1) = std::sync::mpsc::channel();
std::thread::spawn(move || {
let i = r.recv().unwrap();
print_num(i);
s1.send(i+1).unwrap();
});
s.send(0).unwrap();
println!("Got back {}", r1.recv().unwrap());
// Panic code below
s.send(1).unwrap();
println!("Got back {}", r1.recv().unwrap());
println!("Hello, world!");
}
第二次调用s.send()
返回一个SendError
. 文档中写道:
只有当通道的接收端断开连接时,发送操作才会失败,这意味着永远无法接收到数据。
你的接收者r
被移动到线程中,读取一条消息,然后被销毁。下一个呼叫没有人接收消息1。也许您希望您的线程在某种循环中重复处理消息?
相关:接收器在尝试通过通道发送时关闭并返回 SendError
1. 这可能并不总是恐慌,因为它依赖于线程执行顺序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句