我有一个每秒触发一次的计时器,在该代码中,它进行 API 调用。有时,API 调用需要的时间超过一秒,并且在前一个完成之前返回轮询似乎会加倍轮询。一旦进入该状态,
invalidate
调用似乎不起作用,并且轮询会变得疯狂。有没有一种简单的方法来处理这样的事情,基本上为给定的计时器“同步”该任务中的代码?我显然不想简单地增加时间间隔,因为无论如何,问题总是会重新出现。
var pollingTimer: Timer?
pollingTimer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { _ in
Task {
await self.makeApiCall()
}
}
您可以使用 Task.sleep 代替计时器
Task {
await self.makeApiCall()
try await Task.sleep(for: .seconds(1))
}