Rust 从MPSC通道成功接收后,进程从不退出

Rust 从MPSC通道成功接收后,进程从不退出,rust,Rust,代码如下: 使用std::thread; 使用std::sync::mpsc; fn main(){ //繁殖线程 let(tx,rx)=mpsc::channel(); 对于0..10中的mut i{ 让txc=tx.clone();//从主发送方克隆 线程::生成(移动| |{ i+=20; println!(“发送:{}”,i); txc.发送(i).打开或其他(| e |{ eprintln!(“{}”,e); }); }); } 在接收端接收{ println!(“已收到:{}”,已收

代码如下:

使用std::thread;
使用std::sync::mpsc;
fn main(){
//繁殖线程
let(tx,rx)=mpsc::channel();
对于0..10中的mut i{
让txc=tx.clone();//从主发送方克隆
线程::生成(移动| |{
i+=20;
println!(“发送:{}”,i);
txc.发送(i).打开或其他(| e |{
eprintln!(“{}”,e);
});
});
}
在接收端接收{
println!(“已收到:{}”,已收到);
}
}
代码运行成功,但挂起,进程永远不会在最后退出

我认为这可能与关闭通道端有关,我尝试通过
tx.drop()
rx.drop()
删除,但编译器给出了一个错误


我在这里做错了什么?

tx
在主线程中,直到
main
函数结束时才会删除,并且在删除所有发送器之前,
rx
不会关闭

要解决此问题,您可以在启动所有线程后使用
(tx)
手动删除它:

使用std::thread;
使用std::sync::mpsc;
fn main(){
//繁殖线程
let(tx,rx)=mpsc::channel();
对于0..10中的mut i{
让txc=tx.clone();//从主发送方克隆
线程::生成(移动| |{
i+=20;
println!(“发送:{}”,i);
txc.发送(i).打开或其他(| e |{
eprintln!(“{}”,e);
});
});
}
//手动删除tx,以确保只有派生线程中的发送器仍在使用
下降(tx);
在接收端接收{
println!(“已收到:{}”,已收到);
}
}

tx
在主线程中直到
main
函数结束时才会删除,并且在删除所有发送器之前,
rx
不会关闭

要解决此问题,您可以在启动所有线程后使用
(tx)
手动删除它:

使用std::thread;
使用std::sync::mpsc;
fn main(){
//繁殖线程
let(tx,rx)=mpsc::channel();
对于0..10中的mut i{
让txc=tx.clone();//从主发送方克隆
线程::生成(移动| |{
i+=20;
println!(“发送:{}”,i);
txc.发送(i).打开或其他(| e |{
eprintln!(“{}”,e);
});
});
}
//手动删除tx,以确保只有派生线程中的发送器仍在使用
下降(tx);
在接收端接收{
println!(“已收到:{}”,已收到);
}
}