2016-06-14 18 views
6

Con Rust 1.9, mi piacerebbe leggere da un timeout mpsc::channelo. 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?

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!"); 
}