2

我正在执行两个异步方法,都是通过块回答的。在打电话给第三个座位之前,我必须等待这两个座位。使用dispatch_group如果我的方法是同步的工作,但我不想改变他们,因为它需要大量的代码重构。Objective-C状态正在等待

更好的说明问题:

[myLib doTask1:^{ 
    // do stuff when task1 is done 
}]; 

[myLib doTask2:^{ 
    // do stuff when task2 is done 
}]; 

然后我想这样做:

[self executeThisWhenBothTasksDone:^{ 
    // do stuff after both tasks are done 
} 

回答

7

dispatch_group_enterdispatch_group_leave会帮助你。最少的代码更改可能是这样的。

dispatch_group_t group = dispatch_group_create(); 

dispatch_group_enter(group); 
[myLib doTask1:^{ 
    // do stuff when task1 is done 
    dispatch_group_leave(group); 
}]; 

dispatch_group_enter(group); 
[myLib doTask2:^{ 
    // do stuff when task2 is done 
    dispatch_group_leave(group); 
}]; 

dispatch_group_notify(group, dispatch_get_main_queue(), ^{ 
    [self executeThisWhenBothTasksDone:^{ 
     // do stuff after both tasks are done 
    } 
}); 
+0

我建议你创建一个问题,而不是根据评论 –

1

您可以使用dispatch_group_asyncdispatch_group_notify得到这个行为非同步方法

相关问题