swift Timer.publish on non main Thread

ars1skjm  于 2023-11-16  发布在  Swift
关注(0)|答案(1)|浏览(133)

当执行下面的代码时,是否可以在非主线程上发布计时器事件。
如何将其发布在非主线程上?

let timer = Timer.publish(every: 1, on: .main, in: common).autoconnect()

timer
.sink {
.......
}

字符串
接受治疗会有帮助的,对吧?
例如:

let timerQueue = DispatchQueue.global(qos: .utility)
timer
.receive(on: queue)
.sink {
.......
}


这是Timer.publish初始化的唯一方法吗?(不确定我们是否可以向Timer.publish传递一个参数来调度非主线程上的计时器事件)?

yhuiod9q

yhuiod9q1#

如果你的目标只是在主线程之外的线程上运行一个计时器,那么下面的代码应该可以工作:

import UIKit
import Combine
import PlaygroundSupport

var saveCancellable: AnyCancellable?

let myThread = Thread {
  let runLoop = RunLoop.current
  saveCancellable = Timer.publish(every: 1.0, on: runLoop, in: .common)
    .autoconnect()
    .sink  { _ in
      debugPrint(Thread.current)
    }

  print("Run the run loop")
  runLoop.run()
}
myThread.start()

PlaygroundSupport.PlaygroundPage.current.needsIndefiniteExecution = true

字符串
这是一个Playground,所以你可以复制和粘贴它,玩代码。
基本上,这段代码创建了一个Thread,然后在该线程上创建了一个RunLoop(通过调用RunLoop.current,隐式地创建了运行循环)。然后我设置了一个定时器,在该运行循环上发布。最后它启动了运行循环。

相关问题