Objective-C条件等待

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)

Kaz*_*oto 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
    }
});
Run Code Online (Sandbox Code Playgroud)