我想按下UI按钮触发一段代码,所以我创建了一个队列并向其发送了一个块异步,但是我没有看到该块在合理的时间内启动。
最小化示例:
class InterfaceController: WKInterfaceController {
...
let queue = DispatchQueue(label: "unique_label", qos: .userInteractive)
@IBAction func on_press() {
print("Touch")
queue.async {
// Stuff
}
}
}
所以我看到"触摸"控制台中的行,但是异步块中没有任何内容发生。
奇怪的是,如果我使用let queue = DispatchQueue.global()
代替它,它似乎可以按预期工作。那么在我自己的队列和使用全局队列之间的操作区别是什么?我本以期望我的QoS给它一些CPU时间。
答案 0 :(得分:0)
那么创建自己的队列和运行之间的差异是什么? 在这里使用全球?
let queue = DispatchQueue(label: "unique_label", qos: .userInteractive)
创建具有高优先级的.serial队列
let queue = DispatchQueue.global()
除了以qos .default返回全局(系统).concurrent queue 之外,实际上什么都不创建。
当您创建自己的队列时,系统将决定在哪个全局队列中调度您的执行请求。队列不是执行引擎...
我无法相信,你的代码永远不会被执行,它不太可能是真的。如果它发生了,那么问题必须在你的代码中某处,这不是你问题的一部分。