1 个稳定版本
1.0.0 | 2022 年 7 月 6 日 |
---|
1474 在 Rust 模式 中
33 每月下载量
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