【发布时间】:2017-06-05 11:32:19
【问题描述】:
我对其他编程语言有很多经验,但在 swift 3 方面没有那么多经验。我想做轮询循环。这是我写的:
DispatchQueue.global(qos: .userInitiated).async {
[unowned self] in
while self.isRunning {
WebService.getPeople(completion: nil)
sleep(100)
}
}
这对我来说很好,每 100 秒,我做一次轮询,然后让这个线程休眠。我想知道,这是在 swift 3 中执行此操作的正确方法吗?
【问题讨论】:
-
首先,尽可能不要。但如果必须,只需使用
Timer -
作为一般规则,如果可以避免,请不要长时间阻塞调度线程。
-
@JeremyP 我听别人说同样的话,但我不明白为什么?如果我在一些低优先级的后台线程上调度,那会造成什么麻烦?
-
使用 GCD,队列上的任务从池中分配线程,该池由操作系统根据 CPU 数量等因素计算得出。当原始任务处于休眠状态时,该线程不能重新分配给另一个调度队列任务。
标签: swift grand-central-dispatch polling