在Swift 3中,當DispatchQueue
完成一項任務時,不需要完成處理程序。 此外,你可以用不同的方式實現你的目標
一種方法是這樣的。
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)")
它將等到循環結束,但在這種情況下,您的郵件線程將被阻止。
你也可以做同樣的事情,這樣的
let myGroup = DispatchGroup()
myGroup.enter()
//// Do your task
myGroup.leave() //// When your task completes
myGroup.notify(queue: DispatchQueue.main) {
////// do your remaining work
}
最後一件事。如果要在使用DispatchQueue完成任務時使用completionHandler,則可以使用DispatchWorkItem
。
下面是一個例子,如何使用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
}
我想在另一個類中執行一個函數,但我想等待完成該函數,然後在當前類中繼續如何處理該函數? –
@SaeedRahmatolahi:或者使用'wait'方法(如果你沒有問題阻止,即如果你不在主線程中),或者提供一個完成處理程序或在你的調用類中使用notify方法。 – shallowThought
爲什麼你要在異步塊外調用'group.enter'?每個區塊都有責任進入和離開組織嗎? – Bill