Swift 与完成块异步
Swift Async With Completion Block
我有两个执行异步的函数。
我尝试 "syncronize" 他们使用:DispatchGroup 和 DispatchQueue
let queue = DispatchQueue(label: "com.company.app.queue", attributes: .concurrent)
let group = DispatchGroup()
queue.async(group: group) {
//func1
}
queue.async(group: group) {
//func2
}
group.notify(queue: queue) {
print("#3 finished")
}
Func1 和 Func2 仅调用:
class func getDataFromUrl( url: URL, completion: @escaping ( Data?, URLResponse?, Error? ) -> ( ) )
{
URLSession.shared.dataTask( with: url )
{
data, response, error in
completion( data, response, error )
}.resume( )
}
但问题是我不知道如何在 queue.async ..
中等待完成块
有人有什么想法吗?
您可以只使用 DispatchGroup
:
let group = DispatchGroup()
group.enter()
API.getDataFromUrl(...) {
// #1 Call finished
group.leave()
}
group.enter()
API.getDataFromUrl(...) {
// #2 Call finished
group.leave()
}
group.notify(queue: .main) {
print("Both call finished")
}
我有两个执行异步的函数。
我尝试 "syncronize" 他们使用:DispatchGroup 和 DispatchQueue
let queue = DispatchQueue(label: "com.company.app.queue", attributes: .concurrent)
let group = DispatchGroup()
queue.async(group: group) {
//func1
}
queue.async(group: group) {
//func2
}
group.notify(queue: queue) {
print("#3 finished")
}
Func1 和 Func2 仅调用:
class func getDataFromUrl( url: URL, completion: @escaping ( Data?, URLResponse?, Error? ) -> ( ) )
{
URLSession.shared.dataTask( with: url )
{
data, response, error in
completion( data, response, error )
}.resume( )
}
但问题是我不知道如何在 queue.async ..
中等待完成块有人有什么想法吗?
您可以只使用 DispatchGroup
:
let group = DispatchGroup()
group.enter()
API.getDataFromUrl(...) {
// #1 Call finished
group.leave()
}
group.enter()
API.getDataFromUrl(...) {
// #2 Call finished
group.leave()
}
group.notify(queue: .main) {
print("Both call finished")
}