Vic*_*côa 2 concurrency block objective-c grand-central-dispatch conditional-statements
我正在执行两个异步方法,都是通过块来回答.在调用第三个块之前,我必须等待两个块都被调用.如果我的方法是同步的,使用dispatch_group会起作用,但我不想改变它们,因为它需要大量的代码重构.
更好地解释问题:
[myLib doTask1:^{
// do stuff when task1 is done
}];
[myLib doTask2:^{
// do stuff when task2 is done
}];
Run Code Online (Sandbox Code Playgroud)
然后我想做一些像:
[self executeThisWhenBothTasksDone:^{
// do stuff after both tasks are done
}
Run Code Online (Sandbox Code Playgroud)
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
}
});
Run Code Online (Sandbox Code Playgroud)