Objective-C 条件等待

标签 objective-c concurrency block conditional-statements grand-central-dispatch

我正在执行两个异步方法,都通过 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_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
    }
});

关于Objective-C 条件等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21031032/

相关文章:

objective-c - 如何交互(点击)隐藏的物体?

java - 防止一个操作被不同的服务器多次调用

ruby - 在并发 Ruby 中链接一组任务

java - 检测 Java Future 上的超时异常而不调用 get()

ruby - 在特定范围内评估 block 并传递参数

objective-c - UITableViewController 保存问题

ios - 如何在 iOS Objective C 中指定约束?

iphone - 如何使用 UILabels 填充 NSMutableArray?

ios - 有没有办法在 iOS 中使用 Call Directory Extension 阻止 No Caller ID?

html - 使用 CSS 将文本覆盖在图像之上