我刚刚开始阅读swift,目前我对如何正确使用线程感到困惑。
我想在下面的代码块中实现的是在调度程序内部执行print语句,但是我想按顺序执行。我的问题是,我当然要在后台线程中而不是在主线程中这样做,因为这是一项漫长的任务,并且同时在我延迟执行的同时按顺序执行它。当前块将一起执行每种情况。
我也查看过Timer和Semaphores,但没有任何结果。
对我做错了什么或我应该采取的方法的任何帮助或解释将不胜感激。
let formattedSeries = ["a", "a", "b"]
let dispatchQueue = DispatchQueue(label: "taskQueue")
let a = 1000
let b = 5000
for (index, letter) in (formattedSeries.enumerated()){
switch letter {
case "a":
dispatchQueue.asyncAfter(deadline: .now() + .milliseconds(a), execute: {
print("a executed")
})
break
case "b":
dispatchQueue.asyncAfter(deadline: .now() + .milliseconds(b), execute: {
print("b executed")
})
break
default:
print("default")
}
}
为了执行任务以便需要异步操作。
AsynchronousOperation
中提供的this answer类>OperationQueue
并将maxConcurrentOperationCount
设置为1
AsynchronousOperation
,并将dispatchQueue.asyncAfter
任务放入子类的main()
方法中。在闭包中调用finish()
(在print("a executed")
之前或之后)您可以使用调度组来强制评估下一个字母以等待评估前一个字母: