taskflow_rs/scheduler/
task_queue.rs1use 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}