如何在 Main 中使用 DispatchTime 在 Loop swift 中运行线程



我对有时间延迟的运行线程表示怀疑 完成时间后不进入调度?

for i in 0...10000 {
let deadLine = DispatchTime.now() + .milliseconds(1000)
DispatchQueue.main.asyncAfter(deadline: deadLine) {
print(i)
}
}

以前有人这样做过吗? 谢谢。

for 循环不等待,它在主线程中执行。DispatchQueue.main.asyncAfter不会阻塞主线程,它所做的只是将代码块排队以在一定时间后执行。排队打印i几乎在同一时间完成,如果不是纳秒,也可能间隔几微秒。

与其尝试阻止主线程,不如使用TimerAPI:

//In a playground
var timer: Timer? = nil
var counter = 0
timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { _ in
print("(counter)t(Date())")
if counter == 10 {
timer?.invalidate()
}
counter += 1
}
timer?.fire()

例如,这将打印:

0   2019-08-19 20:19:36 +0000
1   2019-08-19 20:19:37 +0000
2   2019-08-19 20:19:38 +0000
3   2019-08-19 20:19:39 +0000
4   2019-08-19 20:19:40 +0000
5   2019-08-19 20:19:41 +0000
6   2019-08-19 20:19:42 +0000
7   2019-08-19 20:19:43 +0000
8   2019-08-19 20:19:44 +0000
9   2019-08-19 20:19:45 +0000
10  2019-08-19 20:19:46 +0000

最新更新