RetryableTask 包含一个名为 withRetryableTask
的全局函数,该函数使用重试执行给定的操作。重试由给定的 RetryPolicy
确定。
以下示例将执行 consumeCoffee
函数直到成功,重试延迟为 100 毫秒,最多尝试 3 次。☕️
withRetryableTask(policy: DelayedRetryPolicy(delay: 100_000_000, maxRetries: 2)) {
try consumeCoffee()
}
使用 Swift Package Manager
…
dependencies: [
.package(url: "https://github.com/rosecoder/retryable-task.git", from: "1.0.0"),
],
…
targets: [
.target(name: "YourProduct", dependencies: [
.product(name: "RetryableTask", package: "retryable-task")
]),
]
可以通过设置静态 DefaultRetryPolicy.retryPolicy
属性来设置默认策略。例如:
DefaultRetryPolicy.retryPolicy = DelayedRetryPolicy(delay: 100_000_000, maxRetries: 2)
这将为所有未定义策略的 withRetryableTask
调用使用新的默认重试策略。
ImmediateRetryPolicy
是一种重试策略,在每次重试之前立即执行(无延迟)。
示例
DefaultRetryPolicy.retryPolicy = ImmediateRetryPolicy(
maxRetries: 5
)
这将执行操作最多 6 次,每次执行之间没有延迟。
DelayedRetryPolicy
是一种重试策略,在每次重试之前具有静态延迟。
示例
DefaultRetryPolicy.retryPolicy = DelayedRetryPolicy(
delay: 100_000_000,
maxRetries: 5
)
这将执行操作最多 6 次,每次执行之间延迟 100 毫秒。
ExponentialBackoffDelayRetryPolicy
是一种重试策略,在每次重试之前具有指数级增长的延迟。
示例
DefaultRetryPolicy.retryPolicy = ExponentialBackoffDelayRetryPolicy(
minimumBackoffDelay: 100_000_000,
maximumBackoffDelay: 400_000_000,
maxRetries: 4
)
这将执行操作最多 5 次,延迟如下:
NoRetryPolicy
是一种根本不重试的重试策略。这对于不应进行重试的单元测试非常有用。
例如,这可以在 XCTestCase
中设置:
class MyTests: XCTestCase {
override func setUp() {
super.setUp()
DefaultRetryPolicy.retryPolicy = NoRetryPolicy()
}
}