我是Rust的新手,并尝试使用Senders和Receivers 设置节点的单向图std::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(_) => {}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我真正想要做的是有两个父节点,这里的next_value功能进行评估,并通知了子节点,只要任一父节点发出另一个值.我不能只使用阻塞recv()方法两次,并且使用轮询和非阻塞try_recv()调用可能会起作用,但它似乎效率很低.
有一个更好的方法吗?
你想用 select!()
fn run(mut self) {
// obtain parents
loop {
select! {
resp = parent1.recv() => match resp {...}
resp = parent2.recv() => match resp {...}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您要接收动态数量的频道,请使用 mpsc::Select
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |