@
kobe1941 那如果有些数据是要基于 **用户的选择** 或者 **不同的用户** 而请求的数据,还是有可能碰到这种情况吧?这里应该如何做?
既然说到 dispatch_group_async/notify ,我还想问问,如果加入到 queue 中的 **一系列任务** 是 **异步的**,此时, notify 到的 block 只是代表 group 已经将这 **一系列任务** 执行完,但它们(一系列任务)的异步执行结果 block 回来可能在 notify 之后,这种情况应该怎么处理?
例如这种情况,使用 group 真心爽:
// 获得系统提供的 Global Dispatch Queue 。
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
// 创建 Dispatch Group ,注意跟 dispatch_queue_create 一样,在 MRC 环境下或者 iOS 6 之前的版本 ARC 环境下需要 用 dispatch_release(group)。
dispatch_group_t group = dispatch_group_create();
// 添加任务 Block 到任务队列 queue 中。
dispatch_group_async(group, queue, ^{NSLog(@"blk0");});
dispatch_group_async(group, queue, ^{NSLog(@"blk1");});
dispatch_group_async(group, queue, ^{NSLog(@"blk2");});
// 通知 group ,那几个任务都结束了。” Done ”消息就属于押尾执行的任务。
dispatch_group_notify(group, dispatch_get_main_queue(), ^{NSLog(@"done");});
但是如果 **添加任务 Block 到任务队列 queue 中** 变成这样:
// 添加任务 Block 到任务队列 queue 中。
dispatch_group_async(group, queue, ^{异步任务 1 ,执行完执行 ^(parameters){} });
dispatch_group_async(group, queue, ^{异步任务 2 ,执行完执行 ^(parameters){} });
dispatch_group_async(group, queue, ^{异步任务 3 ,执行完执行 ^(parameters){} });
问题出现了:它们(异步任务 1 , 2 , 3)的异步执行结果 block 回来可能在 notify 之后。怎么破?