Mulithreading:执行方法调用完成执行其他方法后,才(Mulithreading: exe

2019-09-02 10:54发布

我想异步处理方法,按要求,一旦第一个方法完成,只有第二种方法应该开始执行。 问题是本身具有对后台线程运行的代码第一种方法。

我试过dispatch_semaphore_wait,但没有工作要么。

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);

        dispatch_group_t group = dispatch_group_create();


        dispatch_group_async(group, queue, ^{

            [self firstMethod];
            NSLog(@"firstMethod Done");

        });
        dispatch_group_notify(group, queue, ^ {

            NSLog(@"1st method completed");
            NSLog(@"2nd method starting");

            [self secondMethod];

        });

FirstMethod本身运行在另一个工作线程这样

-(void)firstMethod
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
   //processing here.....       

 }];

什么是实现这一目标的最好方式,我不能改变firstMethod的定义,因为它通过一些第三方提供,也改变它意味着改变很多从那里这种方法被调用现有的代码

Answer 1:

您可以使用一个完成块。 你只需要修改firstMethod这种方式:

- (void)firstMethodWithOnComplete:(void (^)(void))onComplete {
      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
          //processing here.....
          onComplete();
       });
}    

然后用它是这样的:

[self firstMethodWithOnComplete:^{
    [self secondMethod];
}];


Answer 2:

派遣一个队列,并呼吁为了你的方法

dispatch_group_async(group, queue, ^{

            [self firstMethod];
            NSLog(@"firstMethod Done");
           [self secondmethod];

        });

或者你可能派遣一组3个并发队列(这是一个狂野的猜想)



文章来源: Mulithreading: executing method calls only after finished executing other method