0

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

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 循环附加到调度组,以便它们同时计算,但是当找到答案时,让我们说在第 3 次运行中,调度组不需要计算其他的,应该像所有任务都完成一样停止并调用group.notify

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

根据我的研究,我们可以group.leave明确地说组中的一个块已完成执行,但是如何做到让组中的所有块在我们达到所需点时都完成呢?

4

0 回答 0