如何阻止两个Receiver中的一个有可用数据?

时间:2015-05-19 05:07:57

标签: rust

我是Rust的新手,并尝试使用Sender中的Receiverstd::sync::mpsc来设置节点的单向图。现在,当每个节点只有一个父节点和一个子节点时,我可以使用它,如下所示:

fn run(mut self) {
    let parent = self.parent.unwrap();
    loop {
        match parent.recv() {
            Ok(input) => {
                self.value = (self.next_value)(input);
                match self.kid {
                    Some(ref k) => { k.send(self.value).unwrap(); },
                    None => {}
                }
            },
            Err(_) => {}
        }
    }

}

但我真正想做的是有两个父节点,其中next_value函数被评估,并且每当 父节点发出另一个值时通知子节点。我不能只使用阻塞recv()方法两次,并且使用轮询和非阻塞try_recv()调用可能会有效,但它似乎效率很低。

有更好的方法吗?

1 个答案:

答案 0 :(得分:7)

您想使用select!()

fn run(mut self) {
    // obtain parents
    loop {
        select! {
           resp = parent1.recv() => match resp {...}
           resp = parent2.recv() => match resp {...}
        }
    }

}

如果您要接收动态数量的频道,请使用mpsc::Select