我正在执行两个异步方法,都通过 block 进行应答。在调用第三个 block 之前,我必须等待两个 block 都被调用。如果我的方法是同步的,则使用 dispatch_group 会起作用,但我不想更改它们,因为它需要大量代码重构。
更好地解释问题:
[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
}
最佳答案
dispatch_group_enter
和 dispatch_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
}
});
关于Objective-C 条件等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21031032/