multithreading - Swift - 我如何等待 dispatch_async 完成?

标签 multithreading swift core-data

当我的应用程序第一次启动时,我执行将数据从磁盘导入 CoreData 的任务。我在后台线程中做事。然后我切换到主线程并从 CoreData 执行加载。

问题是有时从 CoreData 加载发生在从磁盘导入完成之前。所以我需要一种方法来等待导入完成,并且只有它们从数据库执行加载。

我如何在 Swift 中执行此操作?

我的代码是这样的:

func firstTimeLaunch() {

dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)) { [unowned self] in

self.importArticlesListFromDisk()
self.importArticlesFromDisk()

       dispatch_async(dispatch_get_main_queue()) { [unowned self] in

       self.loadArticlesListFromDb()
       self.loadArticlesFromDb()

       }

   }
}

最佳答案

也许您应该尝试向 importArticlesListFromDisk 和 importArticlesFromDisk 添加完成处理程序,然后在完成 block 中从数据库加载。

dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)) { [unowned self] in
    self.importArticlesAndArticlesListFromDisk() {
       // Completion Handler
       dispatch_async(dispatch_get_main_queue()) { [unowned self] in
           self.loadArticlesListFromDb()
           self.loadArticlesFromDb()
       }
    }
}

关于multithreading - Swift - 我如何等待 dispatch_async 完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33825588/

相关文章:

swift - 添加项目后更新 TableViewController 的数据

java - 在多线程服务器中处理数据库连接时出现问题 - Java

ios - 我如何识别不同的pickerView?

swift - SKSpriteNode 未更新

ios - 具有不同圆角半径的 WatchKit WKInterfaceGroup

ios - 关于 "to-many"和谓词

swift - 通过将新项目保存到具有继承性的过滤提取请求,CoreData 出错

ruby-on-rails - Ruby Multi threading,我在做什么错?

c++ - 使用 Qt 以不同的方法线程化

android - 如何在不出现 "cannot make a static reference to the non static method"编译器错误的情况下使用 runOnUiThread