标签:bsp int oid 异步 dispatch wait 完成 default 16px
1.线程监听
有时候经常有这样的需求,AB任务都执行完成之后,刷新界面或者执行其他操作,
/**
* 队列组 dispatch_group_notify
*/
- (void)groupNotify {
NSLog(@"begin");
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 追加任务1
for (int i = 0; i < 2; ++i) {
NSLog(@"任务1---%@",[NSThread currentThread]); // 打印当前线程
}
});
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 追加任务2
for (int i = 0; i < 2; ++i) {
NSLog(@"任务2---%@",[NSThread currentThread]); // 打印当前线程
}
});
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
// 等前面的异步任务1、任务2都执行完毕后,回到主线程执行任务
for (int i = 0; i < 2; ++i) {
NSLog(@"等待1,2完成后的任务3---%@",[NSThread currentThread]); // 打印当前线程
}
NSLog(@"end");
});
}

2.线程等待
暂停当前线程(阻塞当前线程),等待指定的 group 中的任务执行完成后,才会往下继续执行
从dispatch_group_wait相关代码运行输出结果可以看出:
当所有任务执行完成之后,才执行 dispatch_group_wait 之后的操作。但是,使用dispatch_group_wait 会阻塞当前线程。
/**
* 队列组 dispatch_group_wait
*/
- (void)groupWait {
NSLog(@"begin");
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 追加任务1
for (int i = 0; i < 2; ++i) {
NSLog(@"任务1---%@",[NSThread currentThread]); // 打印当前线程
}
});
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 追加任务2
for (int i = 0; i < 2; ++i) {
NSLog(@"任务2---%@",[NSThread currentThread]); // 打印当前线程
}
});
// 等待上面的任务全部完成后,会往下继续执行(会阻塞当前线程)
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 追加任务3
for (int i = 0; i < 2; ++i) {
NSLog(@"任务3---%@",[NSThread currentThread]); // 打印当前线程
}
});
}

标签:bsp int oid 异步 dispatch wait 完成 default 16px
原文地址:https://www.cnblogs.com/huangzhenwei/p/9728582.html