使用DispatchGroup可以解决并行的URLSession请求在调用完成处理程序两次的问题。下面是一个示例代码:
首先,我们创建一个DispatchGroup对象:
let group = DispatchGroup()
然后,我们使用group.enter()在每个并行的URLSession请求之前进入DispatchGroup:
group.enter()
let task1 = URLSession.shared.dataTask(with: url1) { (data, response, error) in
// 处理请求结果
// ...
group.leave()
}
group.enter()
let task2 = URLSession.shared.dataTask(with: url2) { (data, response, error) in
// 处理请求结果
// ...
group.leave()
}
// 更多的并行请求
// ...
task1.resume()
task2.resume()
// ...
最后,我们使用group.notify(queue: .main)在所有并行请求完成后调用完成处理程序:
group.notify(queue: .main) {
// 所有并行请求完成后的处理
// ...
}
这样,无论并行的URLSession请求是否调用完成处理程序两次,使用DispatchGroup都可以确保在所有请求完成后再执行后续操作。
上一篇:并行的sqlAlchemy会话