#task #running #long #failed #factory #handler #respawn

tokio-futures-respawn

用于重启失败的长运行任务的实用函数

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 次下载

MIT/Apache

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