美文网首页iOS面试
Swift-并发任务

Swift-并发任务

作者: SK丿希望 | 来源:发表于2018-03-19 10:13 被阅读185次

    个人思路(例如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("任务喜欢执行完毕")
        }
    

    打印结果

    image.png

    相关文章

      网友评论

        本文标题:Swift-并发任务

        本文链接:https://www.haomeiwen.com/subject/fayuqftx.html