如何手动停止 DispatchGroup当我们达到某个值时并让它调用 .notify手动完成所有执行

问题描述

这与想在一段时间后停止不同。 一个可能的用例示例:

func calculate(_ nums: [Int],_ target: Int,completion: @escaping (([Int]) -> Void)) {
        let enumerated = nums.enumerated()
        let queue = dispatchQueue.global(qos: .default)
        let group = dispatchGroup()
        var answer: [Int] = []
        queue.async { () -> Void in
            for (xIndex,xElement) in nums.enumerated() {
                queue.async(group: group) {
                    for (yIndex,yElement) in enumerated where yIndex != xIndex {
                        if xElement + yElement == target {
                            answer = [xIndex,yIndex]
                            //I want it to end here
                        }
                    }
                }
            }
            group.notify(queue: queue) {
                completion(answer)
            }
        }
    }

这里我将每个内部 for 循环附加到调度组,以便它们同时计算,但是当找到答案时,让我们说在第三个 for 运行中,调度组不需要计算其他人,应该在所有任务完成后停止并调用 group.notify

基本上我希望它在到达答案时return。有没有办法做到这一点?如果是这样怎么办?

根据我的研究,我们可以使用 group.leave 来明确表示组中的一个块已完成执行,但是如何做到所有组中的块当我们到达所需的点时完成?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)