#tokio #queue #async #delay #run-time #data-structures #pop

tokio_delayed_queue

Asynchronous delayed queue for Tokio runtime

3 releases

0.1.2 May 27, 2024
0.1.1 May 25, 2024
0.1.0 May 25, 2024

#626 in Asynchronous

Download history 382/week @ 2024-05-23 42/week @ 2024-05-30 3/week @ 2024-06-06 6/week @ 2024-06-27 27/week @ 2024-07-04 4/week @ 2024-07-25

91 downloads per month

MIT and GPL-3.0-or-later

26KB
210 lines

Tokio delayed queue

Asynchronous delayed queue for Tokio runtime.

Features

  • multi-consume
  • multi-produce
  • fixed queue size
  • atomic pop with pop-future cancelation

Example

let queue = DelayedQueue::new(16);

// Push
queue.push(1, Duration::from_secs(1)).await;
queue.push(1, Duration::from_secs(2)).await;

// Pop
let v = queue.pop().await;
assert_eq!(v, 1);

// Other future
let join = tokio::spawn({
    let queue = queue.clone();
    async move {
        // Cancelled 1
        let dropped_future = queue.pop();
        drop(dropped_future);

        // Cancelled 2
        let dropped_future = queue.pop();
        drop(dropped_future);

        // Pop
        let v = queue.pop().await;
        assert_eq!(v, 1);

        // Pop
        let v = queue.pop().await;
        assert_eq!(v, 1);
    }
});

// Push
queue.push(1, Duration::from_secs(2)).await;

join.await.unwrap();

Dependencies

~2.7–8.5MB
~65K SLoC