Rust代码使用线程和通道恐慌



我正在编写我的第一个Rust程序,但是遇到了恐慌。代码一直运行到panic注释,我在这里是否遗漏了一些明显的东西?

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。也许您希望线程在某种循环中重复处理消息?

相关:试图通过通道

发送时,接收端关闭并返回一个sender error。<一口>1。这可能并不总是panic,因为它依赖于线程的执行顺序。

最新更新