Trong Swift 3, không cần trình xử lý hoàn thành khi DispatchQueue
hoàn thành một tác vụ. Hơn nữa, bạn có thể đạt được mục tiêu của mình theo nhiều cách khác nhau
Một cách là:
var a: Int?
let queue = DispatchQueue(label: "com.app.queue")
queue.sync {
for i in 0..<10 {
print("Ⓜ️" , i)
a = i
}
}
print("After Queue \(a)")
Nó sẽ đợi cho đến khi vòng lặp kết thúc nhưng trong trường hợp này luồng chính của bạn sẽ bị chặn.
Bạn cũng có thể làm điều tương tự như sau:
let myGroup = DispatchGroup()
myGroup.enter()
//// Do your task
myGroup.leave() //// When your task completes
myGroup.notify(queue: DispatchQueue.main) {
////// do your remaining work
}
Một điều cuối cùng: Nếu bạn muốn sử dụng CompleteHandler khi nhiệm vụ của bạn hoàn thành bằng cách sử dụng DispatchQueue, bạn có thể sử dụng DispatchWorkItem
.
Đây là một ví dụ về cách sử dụng DispatchWorkItem
:
let workItem = DispatchWorkItem {
// Do something
}
let queue = DispatchQueue.global()
queue.async {
workItem.perform()
}
workItem.notify(queue: DispatchQueue.main) {
// Here you can notify you Main thread
}