task_manager/
task_manager.rs1use coachman as cm;
2use coachman::try_await;
3use coachman::{Canceled, Completed};
4use std::time;
5
6async fn inner(i: usize) {
7 match try_await!(tokio::time::sleep(time::Duration::from_secs(i as u64))) {
8 Canceled => println!("task#{} inner canceled", i),
9 Completed(_) => println!("task#{} inner completed", i),
10 };
11}
12
13async fn outer(i: usize) {
14 match try_await!(inner(i)) {
15 Canceled => println!("task#{} outer canceled", i),
16 Completed(_) => println!("task#{} outer completed", i),
17 }
18
19 println!("task#{} canceled: {}", i, cm::is_task_canceled());
20}
21
22#[tokio::main(flavor = "current_thread")]
23async fn main() {
24 let mut task_manager = cm::TaskManager::builder().with_max_tasks(10).with_capacity(10).build();
25
26 let mut task_keys = Vec::new();
27 for i in 0..10 {
28 let task_key = task_manager.try_spawn(outer(i)).unwrap();
29 task_keys.push(task_key)
30 }
31
32 tokio::time::timeout(time::Duration::from_secs(5), task_manager.process(false)).await;
33
34 for task_key in task_keys {
35 if task_manager.cancel_task(task_key).is_ok() {
36 println!("task-{} canceled", task_key)
37 } else {
38 println!("task-{} already finished", task_key)
39 }
40 }
41
42 task_manager.join(true).await;
43}