有没有办法取消 DispatchQueue concurrentPerform 操作?

Is there a way to cancel a DispatchQueue concurrentPerform operation?

有没有办法停止 concurrentPerform 操作?

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 桥来使用并发枚举。

DispatchQueue.concurrentPerform 使块执行指定次数,并等待所有迭代完成。没有办法阻止这种情况。 (如果目标队列是并发队列,则并行块 运行。)

当然,如果满足某些条件,每个工作项都可以“提前return”,但这不会影响其他工作项。

您的代码崩溃,因为 leave() 在调度组上的调用次数多于 enter()