13个版本 (5个破坏性更新)

0.6.2 2024年8月3日
0.6.0 2024年6月15日
0.5.1 2024年2月16日
0.1.2 2023年5月30日

#849 in 异步

Download history 125/week @ 2024-06-15 2/week @ 2024-06-22 2/week @ 2024-07-27 212/week @ 2024-08-03 2/week @ 2024-08-10

每月216次下载
用于 spaghettinuum

ISC许可证

14KB
274 代码行

这是一个管理异步任务的工具。

例如,您可能有一些周期性的后台任务,加上几个Web服务器。使用 TaskManager 您可以将这些任务分组,并以优雅的方式作为一个组关闭它们,等待它们全部结束。

处理

  • 长任务
  • 简单的周期性任务(调用之间的固定睡眠时间)
  • 异步流
  • Ctrl+c关闭

用法

let tm = TaskManager::new();
tm.attach_sigint({
    log2 = logger.clone();
    |e| log2.err("Error handling sigint", e)
});
let tm1 = tm.clone();
let log2 = logger.clone();
tm.task(async move {
    match tm1.if_alive(server).await {
        Some(r) => match r {
            Ok(_) => {} // Server exited normally
            Err(e) => {
                log.err("Server died with error", e);
            }
        },
        None => {} // Received shutdown
    };
});

tm.join().await;

依赖

~7–18MB
~243K SLoC