Grand Central Dispatch-检查任务是否完成

时间:2017-09-16 09:59:12

标签: swift xcode macos

我想做一个冗长的后台操作;完成后我需要刷新一个TableView

let globalQueue = DispatchQueue.global()
                globalQueue.async {
                   //My lengthy code 
                }

我需要在异步任务完成后执行此操作

 treeview.reloadData()

如何挂钩GCD任务完成事件?我有C#背景,我是SWIFT的新手..请指教。

2 个答案:

答案 0 :(得分:3)

您只需将其放在代码后面的main队列中:

let globalQueue = DispatchQueue.global()
globalQueue.async {
    // Your code here
    DispatchQueue.main.async {
        self.treeview.reloadData()
    }
}

答案 1 :(得分:1)

我建议使用DispatchGroup。通过组,您可以创建依赖关系,并在完成所有操作后收到通知。

// create a group to synchronize our tasks
let group = DispatchGroup()

// The 'enter' method increments the group's task count…
group.enter()
let globalQueue = DispatchQueue.global()
globalQueue.async {
    // my lengthy code 
     group.leave()
}

// closure will be called when the group's task count reaches 0
group.notify(queue: .main) { [weak self] in
    self?.tableView.reloadData()
}