#tokio #async #队列 #运行时 #延迟 #弹出 #数据结构

tokio_delayed_queue

为Tokio运行时提供的异步延迟队列

3个版本

0.1.2 2024年5月27日
0.1.1 2024年5月25日
0.1.0 2024年5月25日

#568 in 异步

MIT and GPL-3.0-or-later

26KB
210 代码行

Tokio延迟队列

为Tokio运行时提供的异步延迟队列。

特性

  • 多消费
  • 多生产
  • 固定队列大小
  • 原子弹出与弹出未来取消

示例

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();

依赖

~2.7–9MB
~65K SLoC