pub fn retry_notify<I, E, Fn, Fut, B, N>(
backoff: B,
operation: Fn,
notify: N,
) -> Retry<impl Sleeper, B, N, Fn, Fut> ⓘExpand description
Retries given operation according to the Backoff policy.
Calls notify on failed attempts (in case of Error::Transient).
Backoff is reset before it is used.
The returned future can be spawned onto a compatible runtime.
Only available through the tokio and async-std feature flags.
§Async notify
notify can be neither async fn or Future. If you need to perform some async
operations inside notify, consider using your runtimes task-spawning functionality.
The reason behind this is that Retry future cannot be responsible for polling
notify future, because can easily be dropped before notify is completed.
So, considering the fact that most of the time no async operations are required in
notify, it’s up to the caller to decide how async notify should be performed.
§Example
use backoff::backoff::Stop;
async fn f() -> Result<(), backoff::Error<&'static str>> {
// Business logic...
Err(backoff::Error::transient("error"))
}
let err = backoff::future::retry_notify(Stop {}, f, |e, dur| {
println!("Error happened at {:?}: {}", dur, e)
})
.await
.err()
.unwrap();
assert_eq!(err, "error");