#delay #queue #wait #schedule

delay-queue

一个并发无界阻塞队列,其中每个元素只能在其延迟到期时被移除

2 个不稳定版本

使用旧 Rust 2015

0.2.0 2017年12月23日
0.1.0 2017年12月9日

#1168 in 并发

每月下载 46
2 crates 中使用

MIT/Apache

31KB
458

DelayQueue for Rust

Build Status Build status Crates.io docs.rs

一个并发无界阻塞队列,其中每个元素只能在其延迟到期时被移除。

示例

extern crate delay_queue;

use std::time::{Duration, Instant};
use std::thread;
use delay_queue::{Delay, DelayQueue};

fn main() {
    let queue: DelayQueue<Delay<&str>> = DelayQueue::new();

    // Clone the queue and move it to the consumer thread
    let mut consumer_queue = queue.clone();
    let consumer_handle = thread::spawn(move || {
        // The pop() will block until an item is available and its delay has expired
        println!("First pop: {}", consumer_queue.pop().value);
        println!("Second pop: {}", consumer_queue.pop().value);
    });

    // Clone the queue and move it to the producer thread
    let mut producer_queue = queue.clone();
    let producer_handle = thread::spawn(move || {
        // This item can only be popped after 3 seconds have passed
        producer_queue.push(Delay::for_duration("3s", Duration::from_secs(3)));

        // This item can be popped immediately
        producer_queue.push(Delay::until_instant("now", Instant::now()));
    });

    consumer_handle.join().unwrap();
    producer_handle.join().unwrap();

    assert!(queue.is_empty());
}

您可以使用以下命令运行此示例: cargo run --example basic_usage

许可协议

许可协议为以下之一:

任选其一。

贡献

除非您明确声明,否则您根据 Apache-2.0 许可证定义提交的任何有意贡献的内容,都将根据上述条款双许可,不附加任何额外条款或条件。

无运行时依赖