Con Rust 1.9, mi piacerebbe leggere da un timeout mpsc::channel
o. C'è un chiaro linguaggio per fare questo lavoro? Ho visto l'approccio instabile descritto in mpsc::Select
ma this Github discussion suggerisce che non è un approccio robusto. C'è un modo migliore per me per ottenere la semantica di ricezione o sospensione?Lettura da un canale o timeout?
6
A
risposta
5
Non so come faresti con i canali della libreria standard, ma il chan crate riporta un chan_select!
macro:
#[macro_use]
extern crate chan;
use std::time::Duration;
fn main() {
let (_never_sends, never_receives) = chan::sync::<bool>(1);
let timeout = chan::after(Duration::from_millis(50));
chan_select! {
timeout.recv() => {
println!("timed out!");
},
never_receives.recv() => {
println!("Shouldn't have a value!");
},
}
}
2
Rust 1.12 introdotto Receiver::recv_timeout
:
use std::sync::mpsc::channel;
use std::time::Duration;
fn main() {
let (.., rx) = channel::<bool>();
let timeout = Duration::new(3, 0);
println!("start recv");
let _ = rx.recv_timeout(timeout);
println!("done!");
}