有关于串行任务和dispatch_queue的问题我的样本是:有 1101 个项目要插入到 sqlite 中,我使用"插入到选择联合所有选择"来执行插入工作,但 sqlite 仅支持 500 个项目一次,因此将数据分开并逐个插入,问题是我的数据库操作模型处理dispatch_queue(串行队列)中的所有sql,并在完成一个任务时使用块进行回调。
所以如果我想在任务 2 成功完成后执行任务 1,我不能,因为调度队列关于此设计的任何想法或建议,或者如果保留调度队列,我该怎么办?
当前代码:
for(int i = 0; i<n;i++) //n tasks
{
do a task in dispatch queue:^(BOOL success){
if(success)
do task 2
}
}
非常感谢
考虑到队列是串行的,这样的事情怎么样:
__block NSError* _task_error = nil;
for(int i = 0; i<n;i++) //n tasks
{
dispatch_async(queue, ^ {
if(_task_error != nil) return; //There was an error in a previous task - we done.
//Try performing operation, and on error - set _task_error to hold information on the problem.
}
}
//Finally, add cleanup operation to log final result.
dispatch_async(queue, ^ {
//Write to your log here, notify handlers on error, etc.
//Finally, clean the _task_error so next batch has a clean start.
_task_error = nil;
}
由于队列是串行的并且保证FIFO,因此块将按顺序执行,如果前一个任务不成功,则不会尝试任务。