Function crossbeam_channel::at
source · [−]Expand description
Creates a receiver that delivers a message at a certain instant in time.
The channel is bounded with capacity of 1 and never gets disconnected. Exactly one message will
be sent into the channel at the moment in time when
. The message is the instant at which it
is sent, which is the same as when
. If when
is in the past, the message will be delivered
instantly to the receiver.
Examples
Using an at
channel for timeouts:
use std::time::{Instant, Duration};
use crossbeam_channel::{at, select, unbounded};
let (s, r) = unbounded::<i32>();
let deadline = Instant::now() + Duration::from_millis(500);
select! {
recv(r) -> msg => println!("received {:?}", msg),
recv(at(deadline)) -> _ => println!("timed out"),
}
When the message gets sent:
use std::time::{Duration, Instant};
use crossbeam_channel::at;
// Converts a number of milliseconds into a `Duration`.
let ms = |ms| Duration::from_millis(ms);
let start = Instant::now();
let end = start + ms(100);
let r = at(end);
// This message was sent 100 ms from the start
assert_eq!(r.recv().unwrap(), end);
assert!(Instant::now() > start + ms(100));