GCD-asyncAfter:如何同步运行

问题描述 投票:-1回答:1

我刚刚开始阅读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")
    }
}
swift xcode grand-central-dispatch
1个回答
0
投票

为了执行任务以便需要异步操作。

  1. 使用AsynchronousOperation中提供的this answer类>
  2. 创建串行OperationQueue并将maxConcurrentOperationCount设置为1
  3. 子类AsynchronousOperation,并将dispatchQueue.asyncAfter任务放入子类的main()方法中。在闭包中调用finish()(在print("a executed")之前或之后)
  4. 将操作添加到串行操作队列中

0
投票

您可以使用调度组来强制评估下一个字母以等待评估前一个字母:

© www.soinside.com 2019 - 2024. All rights reserved.