如何在 swift 6 中启动 actor 中的计时器

问题描述 投票:0回答:1

我想在后台线程中使用计时器来执行类似 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()
。如何实现,谢谢!

ios timer swift6
1个回答
0
投票

我遇到了这个,因为我有类似的问题,但我认为在一般演员(并发)上下文中没有关于 RunLoop 的信息,所以不会工作。我发现这可以解释,但有点旧,所以不确定是否有新的建议可用。 https://wadetregaskis.com/performing-a-delayed-and-or-repeating-operation-in-a-swift-actor/

© www.soinside.com 2019 - 2024. All rights reserved.