Add examples of how to read from a channel with a timeout, refs #13862
This commit is contained in:
parent
e7f11f20e5
commit
5412fdacaf
@ -120,6 +120,52 @@
|
|||||||
//! });
|
//! });
|
||||||
//! rx.recv();
|
//! rx.recv();
|
||||||
//! ```
|
//! ```
|
||||||
|
//!
|
||||||
|
//! Reading from a channel with a timeout requires to use a Timer together
|
||||||
|
//! with the channel. You can use the select! macro to select either and
|
||||||
|
//! handle the timeout case. This first example will break out of the loop
|
||||||
|
//! after 10 seconds no matter what:
|
||||||
|
//!
|
||||||
|
//! ```no_run
|
||||||
|
//! use std::io::timer::Timer;
|
||||||
|
//!
|
||||||
|
//! let (tx, rx) = channel::<int>();
|
||||||
|
//! let mut timer = Timer::new().unwrap();
|
||||||
|
//! let timeout = timer.oneshot(10000);
|
||||||
|
//!
|
||||||
|
//! loop {
|
||||||
|
//! select! {
|
||||||
|
//! val = rx.recv() => println!("Received {}", val),
|
||||||
|
//! () = timeout.recv() => {
|
||||||
|
//! println!("timed out, total time was more than 10 seconds")
|
||||||
|
//! break;
|
||||||
|
//! }
|
||||||
|
//! }
|
||||||
|
//! }
|
||||||
|
//! ```
|
||||||
|
//!
|
||||||
|
//! This second example is more costly since it allocates a new timer every
|
||||||
|
//! time a message is received, but it allows you to timeout after the channel
|
||||||
|
//! has been inactive for 5 seconds:
|
||||||
|
//!
|
||||||
|
//! ```no_run
|
||||||
|
//! use std::io::timer::Timer;
|
||||||
|
//!
|
||||||
|
//! let (tx, rx) = channel::<int>();
|
||||||
|
//! let mut timer = Timer::new().unwrap();
|
||||||
|
//!
|
||||||
|
//! loop {
|
||||||
|
//! let timeout = timer.oneshot(5000);
|
||||||
|
//!
|
||||||
|
//! select! {
|
||||||
|
//! val = rx.recv() => println!("Received {}", val),
|
||||||
|
//! () = timeout.recv() => {
|
||||||
|
//! println!("timed out, no message received in 5 seconds")
|
||||||
|
//! break;
|
||||||
|
//! }
|
||||||
|
//! }
|
||||||
|
//! }
|
||||||
|
//! ```
|
||||||
|
|
||||||
// A description of how Rust's channel implementation works
|
// A description of how Rust's channel implementation works
|
||||||
//
|
//
|
||||||
|
Loading…
Reference in New Issue
Block a user