4 个版本
0.1.3 | 2023 年 4 月 21 日 |
---|---|
0.1.2 | 2023 年 4 月 21 日 |
0.1.1 | 2023 年 4 月 21 日 |
0.1.0 | 2023 年 4 月 21 日 |
#1438 在 异步
每月 43 次下载
10KB
200 行
用于重启失败的长运行任务的实用函数
创建一个任务工厂,用于在运行的任务失败时重启新的任务。
实现 FutureFactory
定义任务如何重启。
实现 ErrorHandler
来自定义错误处理。
调用 make_future_respawnable
并与错误处理器一起使用工厂,使其生效。
struct TaskReturnsResult;
impl FutureFactory<Result<(), io::Error>> for TaskReturnsResult {
fn build_future(&mut self) -> Pin<Box<dyn Future<Output = Result<(), io::Error>> + Send>> {
Box::pin(async { panic!("boom") })
}
}
let factory = TaskReturnsResult;
let handler = AlwaysRespawnAndTrace {
duration: std::time::Duration::from_millis(1),
};
let join_handle = tokio::spawn(make_future_respawnable(handler, factory));
sleep(Duration::from_millis(10)).await;
join_handle.abort();
let err = join_handle.await.unwrap_err();
assert!(!err.is_panic(), "{:?}", err);
assert!(err.is_cancelled(), "{:?}", err);
依赖项
~2–3MB
~47K SLoC