Extensible, asynchronous retry behaviours based on futures, for the ecosystem of tokio libraries.
Add this to your Cargo.toml
:
[dependencies]
tokio-retry = "*"
By default, tokio-retry
will work both with the Handle
type from tokio-core
, and the Timer
type from tokio-timer
. Both of these can be disabled or enabled via cargo feature flags:
[dependencies.tokio-retry]
version = "*"
default-features = false
# enable only tokio-core compatibility
features = ["tokio_core"]
extern crate futures;
extern crate tokio_timer;
extern crate tokio_retry;
use std::time::Duration;
use std::default::Default;
use futures::future::Future;
use tokio_timer::Timer;
use tokio_retry::RetryStrategy;
use tokio_retry::strategies::ExponentialBackoff;
fn action() -> Result<u64, ()> {
// do some real-world stuff here...
Ok(42)
}
pub fn main() {
let retry_strategy = ExponentialBackoff::from_millis(10)
.limit_delay(Duration::from_millis(1000))
.limit_retries(3)
.jitter();
let retry_future = retry_strategy.run(Timer::default(), action);
let retry_result = retry_future.wait();
assert_eq!(retry_result, Ok(42));
}