我想在后台线程中使用计时器来执行类似 swift 6 中的 ping 操作。
这是代码:
actor TimerActor {
var timer: Timer?
func start() {
timer = Timer.scheduledTimer(withTimeInterval: 2, repeats: true, block: { timer in
Task {
await self.ping()
}
})
RunLoop.current.add(timer!, forMode: .common)
}
func ping() {
print("send ping")
}
}
用法
class ViewController: UIViewController {
let actor = TimerActor()
override func viewDidLoad() {
super.viewDidLoad()
Task {
await actor.start()
}
}
}
根本没有调用
ping()
。如何实现,谢谢!
我遇到了这个,因为我有类似的问题,但我认为在一般演员(并发)上下文中没有关于 RunLoop 的信息,所以不会工作。我发现这可以解释,但有点旧,所以不确定是否有新的建议可用。 https://wadetregaskis.com/performing-a-delayed-and-or-repeating-operation-in-a-swift-actor/