Receiver
我正在尝试在指定的时间内连续读取 a 。我想出了以下解决方案
pub fn get<T>(
rx: &Receiver<T>,
get_duration: time::Duration,
) -> Result<(), Err> {
let (dur_tx, dur_rx) = channel();
let _ = thread::spawn(move || {
// timer to kill receiving
thread::sleep(get_duration);
let _ = dur_tx.send("tick");
});
let mut time_to_break = false;
while time_to_break == false {
match rx.try_recv() {
Ok(resp) => {
//...
}
Err(_) => ()
}
thread::sleep(time::Duration::from_millis(1)); // avoid using cpu 100%
let _ = dur_rx.try_recv().map(|_| time_to_break = true);
}
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来解决这个问题,而无需不稳定或不推荐使用的功能(例如select
)或外部板条箱?