rust 程序挂起在通道上

svgewumm  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(108)

有人能解释一下,为什么如果我从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");
}

字符串

gzszwxb4

gzszwxb41#

代码在没有move的情况下挂起,因为在该变体中,tx永远不会被丢弃,因此通道不会关闭,因此rx无限期地等待额外的数据,您可以在rx.iter()之前关闭通道。

相关问题