Function backoff::future::retry_notify[][src]

pub fn retry_notify<I, E, Fn, B, N>(
    backoff: B,
    operation: Fn,
    notify: N
) -> Retry<B, N, Fn, Fn::Fut> where
    B: Backoff,
    Fn: FutureOperation<I, E>,
    N: Notify<E>, 

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.

Async notify

notify can be neither async fn or Future. If you need to perform some async operations inside notify, consider to use tokio::spawn or async_std::task::spawn for that.

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::{future, backoff::Stop};

async fn f() -> Result<(), backoff::Error<&'static str>> {
    // Business logic...
    Err(backoff::Error::Transient("error"))
}

future::retry_notify(Stop {}, f, |e, dur| println!("Error happened at {:?}: {}", dur, e))
    .await
    .err()
    .unwrap();