pub async fn optimistic_retry_async<Func, Fut, T, E>(
    ctx: &str,
    f: Func
) -> impl Future<Output = Result<T, OptimisticRetryError<E>>>where
    Func: FnMut() -> Fut,
    Fut: Future<Output = Result<T, E>>,
    E: Error,