簡體   English   中英

完成創建塊隊列

[英]Creating block queues with completion

我想創建兩個帶有完成塊的異步隊列,完成這些塊后,我想運行一些操作。 我無法用此代碼實現它。 我哪里不好?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM