5个版本
0.1.0 | 2023年10月4日 |
---|---|
0.1.0-rc.3 | 2023年1月20日 |
0.1.0-rc.1 | 2023年1月17日 |
0.1.0-rc.0 | 2023年1月13日 |
#2 in #outcome
2,201每月下载量
在7个crate中使用(通过holochain)
24KB
519 行
task-motel
一个有偏见的Tokio*任务管理器,具有任意嵌套的任务分组。
任务管理器接受两个泛型参数
pub struct TaskManager<GroupKey, Outcome>
where
GroupKey: Clone + Eq + Hash + Send + std::fmt::Debug + 'static,
Outcome: Send + 'static,
每个不同的GroupKey
(由Eq
定义)对应一个不同的组,因此使用相同GroupKey
注册的任务属于同一组。使用enum
作为您的GroupKey
是有用的。
Outcome
是所有任务必须返回的类型,可以是任何您想要的。
task-motel构建时几乎完全与执行器无关,但最终我需要能够启动一个任务,该任务将运行到完成而无需轮询,而这在依赖某个执行器的情况下是无法实现的。如果这可以解决,那么可以移除Tokio依赖。
处理任务结果
在构建一个TaskManager
时,您将获得一个通道接收器,该接收器接收每个已完成的任务的(GroupKey, Outcome)
。根据任务的结果,您可以通过终止应用程序、记录错误、启动新任务等方式进行响应。
分组任务
在注册任务时,您将其分配到一组。该组中的任务可以与其他组的任务单独管理:可以指示整个组停止,并等待关闭。
嵌套组
组可以任意嵌套,因此关闭父组也将递归地关闭所有子组。嵌套结构由TaskManager::new
构造函数的Fn(GroupKey) -> Option<GroupKey>
函数参数确定,该参数接受一个GroupKey
并生成一个Option<GroupKey>
,声明组的父级,定义树结构。
停止任务
在注册任务时,必须使用一个闭包来注入一个StopListener
。这个StopListener
是一个简单的future,当任务管理器收到关闭信号时会解析,因此应该相应地将其集成到任务中,以允许任务从外部输入关闭。
只有当任务完成后,才应该丢弃StopListener,因为任务管理器使用流通中的StopListener的数量来确定正在积极管理的任务数量。
依赖项
~3.5–9.5MB
~77K SLoC