如果我们使用GCD方法进行迭代,一旦条件匹配,如何打破/停止循环?
queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_apply(count, queue, ^(size_t i) {
printf("%u\n", i);
//doing thread safe(also heavy) operation here
if (condition) {
//exit the loop
}
});
答案 0 :(得分:1)
无法取消dispatch_apply
,因为并非所有操作都按顺序完成,而是同时完成。 dispatch_apply
的目的是并行化for循环,其中所有迭代都独立于其他迭代。
但是,您可以使用表示条件满足的布尔值。所有待处理的操作在调用时立即被取消。
__block BOOL stop = NO;
queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_apply(count, queue, ^(size_t i) {
if (stop)
return;
//Do stuff
if (condition)
stop = YES;
});