pub async fn retry_external<R, F, WorkFn>(
    metrics: &RetryMetrics,
    work_fn: WorkFn
) -> R where
    F: Future<Output = Result<R, ExternalError>>,
    WorkFn: FnMut() -> F,