创建完成的块队列

时间:2014-12-10 12:33:28

标签: ios grand-central-dispatch

我想用完成块创建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");
});

1 个答案:

答案 0 :(得分:1)

首先,你在某处遗漏了});。其次,无论如何都不需要外部dispatch_group_async电话。假设它在那里,因为你希望这些东西以后台优先级执行,你可以这样做:

dispatch_queue_t queue = dispatch_queue_create("com.company.queue", 0);
dispatch_set_target_queue(queue, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0));
dispatch_group_t group = dispatch_group_create();

// 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");
});