如何在Swift中将任务发送到后台队列?

ayj*_*joy 2 multithreading ios swift ios-multithreading

我有一个在用户点击按钮时设置的本地通知。我想将此发送到后台线程,然后更新UI。这是一种安全的方法吗?

    DispatchQueue.global(qos: .background).async { // sends registration to background queue
        center.add(request, withCompletionHandler: {(error) in
            if let error = error {
                print(error)
            }
        })
        DispatchQueue.main.async {
            try! self.realm.write {
                self.realm.add(task)
                self.updateData()
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Tam*_*gel 6

您应该在完成处理程序内移动主线程块。否则,您的代码看起来不错。

DispatchQueue.global(qos: .background).async { // sends registration to background queue
    center.add(request, withCompletionHandler: {(error) in
        if let error = error {
            print(error)
        } else {
            DispatchQueue.main.async {
                try! self.realm.write {
                    self.realm.add(task)
                    self.updateData()
                }
            }
        }
    })

}
Run Code Online (Sandbox Code Playgroud)