繁体   English   中英

我可以区分“DispatchGroup”异步任务完成吗?

[英]Can I distinguish `DispatchGroup` async tasks completion?

假设我有三个异步函数 A、B、C。

我想在完成这三个后回调,我将使用DispatchGroup

但我有一批这些异步任务 A、B、C。 假设,其中 6 个。

现在我想要在每个 A、B、C 异步任务完成后进行回调。

喜欢,

A
B
C
Callback
A
B
C
Callback
A
B
C
Callback

使用DispatchGroup ,我得到,

A
B
C
A
B
C
A
B
C
Callback

作为group,notify()仅在每个人都有group.leave()

样本,

// Called 6 times

private func fetchLists(in room: Room, 
completion: @escaping(                                                                   _ ownerList: [Any], 
_ memberList: [Any],
_ subscribersList: [Any]) -> Void) {

        var ownerList = [Any]()
        var memberList = [Any]()
        var subscribersList = [Any]()
        
        let group = DispatchGroup()

        group.enter()
        // Asyncronous
        fetchOwners(in: room, completion: { list in
            ownerList = list
            group.leave()
        })
        
        group.enter()
        // Asyncronous
        fetchMembers(in: room, completion: { list in
            memberList = list
            group.leave()
        })
        
        group.enter()
        // Asyncronous
        fetchSubscribers(in: room, completion: { list in
            subscribersList = list
            group.leave()
        })
    
        debug("Called 6 times")
        group.notify(queue: .main) {
            debug("Called 1 time. Want it to be called 6 times each with 3 batch.")
            completion(memberList, ownerList, subscribersList)
        }
    }

根据DispatchGroup文档,当 group 为空时调用 notify 方法,这意味着您必须调用group.enter() () 与调用group.leave()一样多次。 对于您的方案,由于您希望在每次批处理操作完成时通知组,您必须为每批任务使用单独的组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM