#retry #block #backoff #macro #configurable #behavior #fail

retry-block

提供使用宏在代码块上配置回退行为来重试可能失败的操作的实用工具

1 个稳定版本

1.0.0 2022 年 7 月 6 日

1474Rust 模式

33 每月下载量

MIT 许可证

39KB
682

retry-block

retry-block 提供使用宏在代码块上配置回退行为来重试可能失败的操作的实用工具

使用方法

使用相应的 retry 宏或 retry_fn 函数重试操作。该宏接受一个 Duration 迭代器和返回一个 Result(或 OperationResult;见下文)的代码块。迭代器用于确定每次未成功尝试后等待多长时间以及尝试多少次后放弃并返回 Result::Err。代码块确定最终的值或错误值,该值可以立即返回或用于指示操作应重试。

任何实现了 IntoIterator<Item = Duration> 的类型都可以用于确定重试行为,尽管 delay 模块提供了一些有用的实现,包括固定延迟和指数退避。

可以使用 Iterator API 限制或修改延迟策略。例如,将重试次数限制为 1

# use retry_block::retry;
# use retry_block::delay::Fixed;
# use std::time::Duration;
# use retry_block::OperationResult;

let mut collection = vec![1, 2, 3].into_iter();

let result = retry!(Fixed::new(Duration::from_millis(100)).take(1), {
    match collection.next() {
        Some(n) if n == 3 => Ok("n is 3!"),
        Some(_) => Err("n must be 3!"),
        None => Err("n was never 3!"),
    }
});

assert!(result.is_err());

依赖关系

~0–12MB
~85K SLoC