Я хочу создать 2 очереди асинхронизации с блоками завершения и после завершения этих блоков я хочу запустить какое-то действие. Я не могу добиться этого с помощью этого кода. Где мое плохое?Создание очередей блоков с завершением
dispatch_queue_t queue = dispatch_queue_create("com.company.queue", 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
// block 1
dispatch_group_async(group, queue, ^{
[[WebRequests sharedInstance] request:@{@"type" : [NSNumber numberWithInt:request_uploadAdv], @"adv" : adv} withCompletion:^(id response) {
BOOL success = [response boolValue];
NSLog(@"done1 text");
// block 1 Done
}];
});
// block 2 //картинки
dispatch_group_async(group, queue, ^{
[self getImagesForAdv:adv completion:^(NSArray *images) {
[[WebRequests sharedInstance] uploadPhotos:images completion:^(BOOL success) {
uploadImagesSuccess = YES;
NSLog(@"done1 2\n");
// block 2 Done
}];
}];
});
dispatch_group_notify(group, queue, ^{
printf("all tasks are finished!\n");
});
Это великолепно. Любопытно: если бы мы хотели вернуться в основную очередь в 'dispatch_group_notify', мы могли бы настроить другую целевую очередь, ориентированную на основную очередь, и использовать ее во втором параметре' dispatch_group_notify' (то есть 'dispatch_group_notify (group, mainQueue)' «Я знаю, что избыточно создавать очередную очередь как« mainQueue », а затем использовать другую« dispatch_set_target_queue »с ней. Но просто хотелось знать, правильно ли было бы делать теоретически. Спасибо. – Unheilig
Да, это сработает. – ipmcc