taskflow_rs/scheduler/
task_queue.rs

1use crate::task::Task;
2use std::sync::Arc;
3use tokio::sync::Mutex;
4
5#[derive(Clone)]
6pub struct TaskQueue {
7    inner: Arc<Mutex<Vec<Task>>>,
8}
9
10impl TaskQueue {
11    pub fn new() -> Self {
12        Self {
13            inner: Arc::new(Mutex::new(Vec::new())),
14        }
15    }
16
17    pub async fn push(&self, task: Task) {
18        let mut queue = self.inner.lock().await;
19        queue.push(task);
20    }
21
22    pub async fn pop(&self) -> Option<Task> {
23        let mut queue = self.inner.lock().await;
24        queue.pop()
25    }
26
27    pub async fn len(&self) -> usize {
28        let queue = self.inner.lock().await;
29        queue.len()
30    }
31
32    pub async fn is_empty(&self) -> bool {
33        let queue = self.inner.lock().await;
34        queue.is_empty()
35    }
36
37    pub async fn clear(&self) {
38        let mut queue = self.inner.lock().await;
39        queue.clear();
40    }
41}