use coachman as cm;
use coachman::try_await;
use coachman::{Canceled, Completed};
use std::time;
async fn inner(i: usize) {
match try_await!(tokio::time::sleep(time::Duration::from_secs(i as u64))) {
Canceled => println!("task#{} inner canceled", i),
Completed(_) => println!("task#{} inner completed", i),
};
}
async fn outer(i: usize) {
match try_await!(inner(i)) {
Canceled => println!("task#{} outer canceled", i),
Completed(_) => println!("task#{} outer completed", i),
}
println!("task#{} canceled: {}", i, cm::is_task_canceled());
}
#[tokio::main(flavor = "current_thread")]
async fn main() {
let mut task_manager = cm::TaskManager::builder().with_max_tasks(10).with_capacity(10).build();
let mut task_keys = Vec::new();
for i in 0..10 {
let task_key = task_manager.try_spawn(outer(i)).unwrap();
task_keys.push(task_key)
}
tokio::time::timeout(time::Duration::from_secs(5), task_manager.process(false)).await;
for task_key in task_keys {
if task_manager.cancel_task(task_key).is_ok() {
println!("task-{} canceled", task_key)
} else {
println!("task-{} already finished", task_key)
}
}
task_manager.join(true).await;
}