3个版本 (破坏性)
0.3.0 | 2021年11月21日 |
---|---|
0.2.0 | 2021年11月20日 |
0.1.0 | 2021年11月14日 |
#807 in 异步
73KB
489 行
CoachMan
coachman
是基于tokio框架构建的Rust异步任务管理器。
特性
- 任务计数控制:
coachman
允许您控制任务计数,防止您的应用程序任务计数不受控制地爆炸。 - 任务取消:
coachman
的主要特性是任务取消。它提供了一个简单的API来使您的任务可取消。
基本示例
CoachMan 的主要特性是使异步任务可取消。
看看以下示例
use coachman as cm;
use coachman::{try_await, Canceled, Completed, TaskError};
async fn inner_func(i: usize, duration: u64) {
match try_await!(tokio::time::sleep(std::time::Duration::from_secs(duration))) {
Canceled => println!("task#{} inner canceled", i),
Completed(_) => println!("task#{} inner completed", i),
}
}
async fn outer_func(i: usize, duration: u64) {
match try_await!(inner_func(i, duration)) {
Canceled => println!("task#{} outer canceled", i),
Completed(_) => println!("task#{} outer completed", i),
}
}
#[tokio::main(flavor = "current_thread")]
async fn main() {
let mut task_handles = Vec::new();
for i in 0..5 {
let duration = i as u64;
task_handles.push(cm::spawn(outer_func(i, duration)));
}
let deadline = tokio::time::Instant::now() + std::time::Duration::from_secs(2);
for (i, mut handle) in task_handles.into_iter().enumerate() {
if tokio::time::timeout_at(deadline, &mut handle).await.is_ok() {
println!("task-{} completed", i);
} else {
handle.cancel();
match handle.await {
Result::Err(TaskError::Canceled) => println!("task-{} canceled", i),
Result::Err(TaskError::Aborted) => println!("task-{} aborted", i),
Result::Err(TaskError::Panicked(_)) => println!("task-{} panicked", i),
Result::Ok(_) => unreachable!(),
}
}
}
}
依赖项
~2.3–4MB
~66K SLoC