问题描述
这与想在一段时间后停止不同。 一个可能的用例示例:
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 (将#修改为@)