首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套dispatch_async (另一个dispatch_async中的dispatch_async)

嵌套dispatch_async (另一个dispatch_async中的dispatch_async)
EN

Stack Overflow用户
提问于 2016-11-10 11:18:30
回答 2查看 202关注 0票数 0

如何正确调用dispatch_asyncdispatch_async中的调用

代码语言:javascript
复制
dispatch_group_t downloadQueue = dispatch_group_create();
dispatch_group_async(downloadQueue,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {

NSLog(@"Main");
[NSThread sleepForTimeInterval:5.0];
NSLog(@"End");

    [self myMethod];

});
dispatch_group_notify(downloadQueue,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0), ^ {

    NSLog(@"FINAL");

});

下面是myMethod:

代码语言:javascript
复制
-(void)myMethod
{
    dispatch_group_t group = dispatch_group_create();
    dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {
        // block1
        NSLog(@"Block1");
        [NSThread sleepForTimeInterval:5.0];
        NSLog(@"Block1 End");
    });
    dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {
        // block2
        NSLog(@"Block2");
        [NSThread sleepForTimeInterval:8.0];
        NSLog(@"Block2 End");
    });

    dispatch_group_notify(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {
        // block3
        NSLog(@"Block3");
    });
}

和我的输出是:

Main

结束

Block1

Block2

最终

Block1结束

Block2结束

Block3

,但我需要

Main

结束

Block1

Block2

Block1结束

Block2结束

Block3

最终

EN

回答 2

Stack Overflow用户

发布于 2016-11-10 12:25:44

只需向您的myMethod组发出通知即可。你的代码是:

代码语言:javascript
复制
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {

    NSLog(@"Main");
    [NSThread sleepForTimeInterval:5.0];
    NSLog(@"End");

    dispatch_group_notify([self myMethod],dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0), ^ {

        NSLog(@"FINAL");

    });
});

-(dispatch_group_t)myMethod{

    dispatch_group_t group = dispatch_group_create();

    dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {
        // block1
        NSLog(@"Block1");
        [NSThread sleepForTimeInterval:5.0];
        NSLog(@"Block1 End");
    });


    dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {
        // block2
        NSLog(@"Block2");
        [NSThread sleepForTimeInterval:8.0];
        NSLog(@"Block2 End");
    });

    dispatch_group_notify(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {
        // block3
        NSLog(@"Block3");
    });
    return group;
}
票数 1
EN

Stack Overflow用户

发布于 2016-11-10 12:02:15

您可以在dispatch_group_wait中使用myMethod代替dispatch_group_notify。这样,只有当两个dispatch_group_async完成执行时,您的方法才会返回。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40526295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档