有没有一种方法可以停止并发执行操作?
let count = arr.count
let group = DispatchGroup()
group.enter()
DispatchQueue.concurrentPerform(iterations: count, execute: { i in
if stop { group.leave(); return } // Crashes with EXC_BAD_INSTRUCTION
// ..
})
group.wait()
经过几次迭代后,此崩溃以EXC_BAD_INSTRUCTION
崩溃。似乎group.leave()
没有退出操作。如何退出取消操作?基本上,我想做的是并发循环一个数组,并在满足某些条件时中断它,而不使用Objective-C桥来使用并发枚举。
答案 0 :(得分:1)
DispatchQueue.concurrentPerform
导致该块执行指定的次数,并等待所有迭代完成。没有办法防止这种情况。 (如果目标队列是并发队列,则这些块并行运行。)
当然,如果满足某些条件,每个工作项都可以“提前归还”,但这不会影响其他工作项。
您的代码崩溃的原因是,leave()
在调度组上的调用次数比enter()
还要多。