GCD调度组使用心得

在用AFN 做多张图片上传的时候,实际上是开启了多个异步线程,在实际上传图片的过程中可能出现个别上传不成功,于是想到了“调度组”,将该异步执行的方法放入调度组中,使用调度组进行监听,同时暂时阻塞处理该方法的队列,等处理完成后再在该队列进行后续操作(通知用户或发出刷新UI通知操作),使用AFN上传图片,实际上内部已经创建了异步线程和全局主队列,开始上传图片的时候只需要加入调度组即可,每次上传成功出组,当所有的图片都上传成功的时候dispatch_group_notify(group, dispatch_get_main_queue(), ^{} 监听到所有异步任务完成再处理其他操作。

AFN上传图片内部实现方法


// 队列

dispatch_queue_t queue = dispatch_get_global_queue(0, 0);

// 调度组

dispatch_group_t group = dispatch_group_create();

// 1. 进入群组,给 group 打一个标记,在后续紧接着的 block 归 group 监听

// dispatch_group_enter 和 dispatch_group_leave 必须成对出现!

// 1. 进入群组

dispatch_group_enter(group);

dispatch_async(queue, ^{

[NSThread sleepForTimeInterval:10];

NSLog(@"download A - %@", [NSThread currentThread]);

// 耗时操作代码

// 2. 离开群组

dispatch_group_leave(group);

});

// 等待群组空,一直到永远,群组不空,这句代码就死等,同步

dispatch_group_wait(group, DISPATCH_TIME_FOREVER);

NSLog(@"OK");

}

// 3. 监听所有任务完成

dispatch_group_notify(group, dispatch_get_main_queue(), ^{

NSLog(@"OVER %@", [NSThread currentThread]);

});

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容