这与想在一段时间后停下来不同。一个可能的用例示例:
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
明确地说组中的一个块已完成执行,但是如何做到让组中的所有块在我们达到所需点时都完成呢?