个人思路(例如2个请求并发执行) (推荐)
1.可以定义2个Bool的属性
var isCompletedShoppingCart : Bool = false // 标记购物车数据网络请求是否完成
var isCompletedLove : Bool = false // 标记喜欢数据网络请求是否完成
2.请求
// MARK: - 请求数据
func loadData(page: NSInteger) {
loadShoppingCartData()
loadLoveData()
}
// MARK: - 请求购物车数据
func loadShoppingCartData() {
HWPrint("任务购物车执行完毕")
isCompletedShoppingCart = true
detection()
}
// MARK: - 请求喜欢数据
func loadLoveData() {
HWPrint("任务喜欢执行完毕")
isCompletedLove = true
detection()
}
// MARK: - 检测任务进度
func detection() {
if isCompletedLove && isCompletedShoppingCart {
HWPrint("任务完成")
}
}
GCD Group并发执行 最后汇总(可能会失败 因为一般请求框架已经开了子线程了 故拦截不到)
// MARK: - 请求数据
func loadData(page: NSInteger) {
weak var weakSelf = self // 弱引用
let group = DispatchGroup()
// 添加任务1
DispatchQueue.global().async(group: group, execute: DispatchWorkItem.init(block: {
weakSelf!.loadShoppingCartData()
}))
// 添加任务2
DispatchQueue.global().async(group: group, execute: DispatchWorkItem.init(block: {
weakSelf!.loadLoveData()
}))
// 汇总任务 组中所有任务都执行完了会发送通知
group.notify(queue: DispatchQueue.main) {
HWPrint("任务组的任务都已经执行完毕啦!")
}
HWPrint("任务完成")
}
// MARK: - 请求购物车数据
func loadShoppingCartData() {
HWPrint("任务购物车执行完毕")
}
// MARK: - 请求喜欢数据
func loadLoveData() {
HWPrint("任务喜欢执行完毕")
}
网友评论