4

我正在尝试根据要求异步处理方法,一旦第一个方法完成,第二个方法才应该开始执行。问题是第一种方法本身具有在后台线程上运行的代码。

我尝试了 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 的定义,因为它由某些 3rd 方提供,并且更改它意味着更改许多现有代码,从该方法被调用

4

2 回答 2

12

您可以使用完成块。你只需要这样修改 firstMethod :

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

然后以这种方式使用它:

[self firstMethodWithOnComplete:^{
    [self secondMethod];
}];
于 2013-05-09T22:31:04.927 回答
-1

调度单个队列并按顺序调用您的方法

dispatch_group_async(group, queue, ^{

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

        });

或者你可以调度一组 3 个并发队列(这是一个疯狂的猜测)

于 2013-05-09T22:16:30.560 回答