有没有办法取消 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()
。
有没有办法停止 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()
。