swift-retry

在 Swift 中进行重试,具有合理的默认设置和强大的灵活性。

Swift 5.9 Linux, visionOS 1, macOS 13, iOS 16, tvOS 16, watchOS 9 MIT License Automated Tests Workflow Status

基本用法

try await retry {
   try await doSomething()
}

请参阅文档,了解更高级用例的示例。

概述

专为 Swift 并发设计

retry 函数是一个 async 函数,它会重复运行给定的 async 闭包,直到成功或失败不再可重试为止。该函数在每次尝试之间休眠,同时尊重任务取消。

合理的默认设置

该库使用与 Amazon Web ServicesGoogle Cloud 类似的默认设置。

一个重要但经常被忽视的默认设置是退避算法的选择,它决定了每次尝试之间休眠的时间。 默认情况下,该库选择指数退避算法,该算法适用于大多数用例。 大多数重试用例都涉及资源(例如服务器)以及可能具有许多客户端的资源,在这些情况下,指数退避算法非常适合避免对资源进行DDoS攻击

强大的灵活性

该 API 提供了多个自定义点,以适应任何用例

安全重试

该模块公开了一个 RetryableRequest 协议,以将安全重试方法添加到符合要求的请求类型。 协议中的重试方法类似于顶级重试函数,但更安全。 协议中的重试方法强制要求请求是幂等的,因为重试非幂等请求是不安全的。

要重试 HTTP 请求,请考虑使用 swift-http-error-handling 包,它将 RetryableRequest 一致性添加到标准 HTTPRequest 类型。