[−][src]Crate futures_delay_queue
A queue of delayed elements running backed by async-std and futures-timer.
Once an element is inserted into the DelayQueue
, it is yielded once the
specified deadline has been reached.
The delayed items can be consumed through a channel returned at creation.
Implementation
The delays are spawned and a timeout races against a reset channel that can be
triggered with the DelayHandle
. If the timeout occurs before cancelation
or a reset the item is yielded through the receiver channel.
Usage
Elements are inserted into DelayQueue
using the insert
or
insert_at
methods. A deadline is provided with the item and a DelayHandle
is
returned. The delay handle is used to remove the entry.
The delays can be configured with the [reset_at
or the [reset
] method or canceled by
calling the cancel
method. Dropping the handle will not cancel the delay.
Example
use futures_delay_queue::delay_queue; use std::time::Duration; #[async_std::main] async fn main() { let (delay_queue, rx) = delay_queue::<i32>(3); let delay_handle = delay_queue.insert(1, Duration::from_millis(20)); delay_handle.reset(Duration::from_millis(40)).await; let delay_handle = delay_queue.insert(2, Duration::from_millis(10)); delay_handle.cancel().await; let delay_handle = delay_queue.insert(3, Duration::from_millis(30)); assert_eq!(rx.recv().await, Some(3)); assert_eq!(rx.recv().await, Some(1)); drop(delay_queue); assert_eq!(rx.recv().await, None); }
Structs
DelayHandle | A handle to cancel the corresponding delay of an item in |
DelayQueue | A queue for managing delayed items. |
Functions
delay_queue | Creates a delay queue and a multi consumer channel for receiving expired items. |