2016-06-14 8 views
6

Mit Rust 1.9, würde ich gerne von einem mpsc::channeloder Timeout lesen. Gibt es eine klare Sprache, um das zu schaffen? Ich habe den in mpsc::Select beschriebenen unstabilen Ansatz gesehen, aber this Github discussion schlägt vor, dass es kein robuster Ansatz ist. Gibt es einen besser empfohlenen Weg, um eine Semantik für den Empfang oder die Zeitüberschreitung zu erreichen?Lesen von einem Kanal oder Timeout?

Antwort

5

Ich weiß nicht, wie Sie es mit der Standardbibliothek Kanälen tun würden, aber die chan crate bietet ein chan_select! Makro:

#[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 Receiver::recv_timeout eingeführt:

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