Rust 如何阻止,直到两个接收器中的一个具有可用数据?

Rust 如何阻止,直到两个接收器中的一个具有可用数据?,rust,Rust,我是个新手,尝试使用std::sync::mpsc中的Senders和Receivers来建立节点的单向图。现在,当每个节点都有一个父节点和一个子节点时,它可以正常工作,如下所示: fn run(mut self) { let parent = self.parent.unwrap(); loop { match parent.recv() { Ok(input) => { self.value = (

我是个新手,尝试使用
std::sync::mpsc
中的
Sender
s和
Receiver
s来建立节点的单向图。现在,当每个节点都有一个父节点和一个子节点时,它可以正常工作,如下所示:

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\u value
函数,并且每当父节点中的任何一个发送另一个值时,都会通知子节点。我不能只使用阻塞
recv()
方法两次,使用轮询和非阻塞
try\u recv()
调用可能会起作用,但它看起来效率非常低

有更好的方法吗?

您想使用


如果您有动态数量的频道可供接收,请使用

谢谢,这正是我想要的!
fn run(mut self) {
    // obtain parents
    loop {
        select! {
           resp = parent1.recv() => match resp {...}
           resp = parent2.recv() => match resp {...}
        }
    }

}