Rust 1.9 ile, mpsc::channel
veya zaman aşımından okumak isterim. Bu işi yapmak için net bir deyim var mı? mpsc::Select
'da açıklanan kararsız yaklaşımı gördüm ama this Github discussion sağlam bir yaklaşım olmadığını gösteriyor. Alma veya zaman aşımı semantiği elde etmem için daha iyi bir yol var mı?Kanaldan veya zaman aşımından okuma?
6
A
cevap
5
Sana standart kütüphane kanalları ile yapardım bilmiyorum, ama chan crate bir chan_select!
makro sağlamaktadır: Receiver::recv_timeout
tanıtıldı
#[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
Pas 1.12:
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!");
}