Skip to main content

task_management/
task_management.rs

1use async_trait::async_trait;
2use minitimer::{TaskBuilder, TaskRunner};
3
4struct SimpleTask {
5    id: u64,
6}
7
8#[async_trait]
9impl TaskRunner for SimpleTask {
10    type Output = ();
11
12    async fn run(&self) -> Result<Self::Output, Box<dyn std::error::Error + Send + Sync>> {
13        println!("Task {} executed!", self.id);
14        Ok(())
15    }
16}
17
18#[tokio::main]
19async fn main() {
20    let timer = minitimer::MiniTimer::new();
21
22    let task1 = TaskBuilder::new(1)
23        .with_frequency_repeated_by_seconds(2)
24        .spwan_async(SimpleTask { id: 1 })
25        .unwrap();
26
27    let task2 = TaskBuilder::new(2)
28        .with_frequency_once_by_seconds(5)
29        .spwan_async(SimpleTask { id: 2 })
30        .unwrap();
31
32    let task3 = TaskBuilder::new(3)
33        .with_frequency_count_down_by_seconds(3, 1)
34        .spwan_async(SimpleTask { id: 3 })
35        .unwrap();
36
37    timer.add_task(task1).unwrap();
38    timer.add_task(task2).unwrap();
39    timer.add_task(task3).unwrap();
40
41    println!("Added 3 tasks. Initial task count: {}", timer.task_count());
42
43    println!("\n--- Pending tasks: {:?}", timer.get_pending_tasks());
44    println!("--- Running tasks: {:?}", timer.get_running_tasks());
45
46    if let Some(status) = timer.task_status(1) {
47        println!("\nTask 1 status: {:?}", status);
48    }
49
50    println!("\n--- Removing task 2 ---");
51    let removed = timer.remove_task(2);
52    if removed.is_some() {
53        println!("Task 2 removed successfully!");
54    }
55
56    println!("Task count after removal: {}", timer.task_count());
57    println!("Contains task 1: {}", timer.contains_task(1));
58    println!("Contains task 2: {}", timer.contains_task(2));
59
60    println!("\nWaiting 4 seconds to let tasks run...");
61    tokio::time::sleep(std::time::Duration::from_secs(4)).await;
62
63    println!("\n--- After 4 seconds ---");
64    println!("Task 1 status: {:?}", timer.task_status(1));
65    println!("Task 3 status: {:?}", timer.task_status(3));
66    println!("Running tasks: {:?}", timer.get_running_tasks());
67
68    println!("\nExample completed.");
69}