[−][src]Crate futures_delay_queue
A queue of delayed elements backed by futures-timer that can be used with both
An element is inserted into the DelayQueue and will be 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 DelayQueue::insert or
DelayQueue::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 DelayHandle::reset_at or the DelayHandle::reset method or canceled by
calling the DelayHandle::cancel method. Dropping the handle will not cancel the delay.
Modification of the delay fails if the delayed item expired in the meantime. In this case
an ErrorAlreadyExpired will be returned. If modification succeeds the handle will
be returned back to the caller.
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)); assert!(delay_handle.reset(Duration::from_millis(40)).await.is_ok()); let delay_handle = delay_queue.insert(2, Duration::from_millis(10)); assert!(delay_handle.cancel().await.is_ok()); let delay_handle = delay_queue.insert(3, Duration::from_millis(30)); assert_eq!(rx.receive().await, Some(3)); assert_eq!(rx.receive().await, Some(1)); drop(delay_queue); assert_eq!(rx.receive().await, None); }
Structs
| DelayHandle | A handle to cancel the corresponding delay of an item in |
| DelayQueue | A queue for managing delayed items. |
| ErrorAlreadyExpired | The error type for delays that are modified after they have already expired in the |
Functions
| delay_queue | Creates a delay queue and a multi consumer channel for receiving expired items. |