有人能解释一下,为什么如果我从for_each中删除“move”,程序就会挂起?
use std::sync::mpsc::channel;
fn main() {
let v = vec![0,1,2,3,4,5,6,7,8,9];
let (tx, rx) = channel();
v.iter().for_each(move |&elem| {
tx.send(elem).unwrap();
});
println!("Tx'ed");
let rx_vec: Vec<_> = rx.iter().collect();
println!("Collected into vec");
}
字符串
1条答案
按热度按时间gzszwxb41#
代码在没有
move
的情况下挂起,因为在该变体中,tx
永远不会被丢弃,因此通道不会关闭,因此rx
无限期地等待额外的数据,您可以在rx.iter()
之前关闭通道。