我正在尝试根据要求异步处理方法,一旦第一个方法完成,只有第二个方法应该开始执行。问题是第一个方法本身具有在后台线程上运行的代码。
我尝试了dispatch_semaphore_wait,但这也不起作用。
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{
[self firstMethod];
NSLog(@"firstMethod Done");
});
dispatch_group_notify(group, queue, ^ {
NSLog(@"1st method completed");
NSLog(@"2nd method starting");
[self secondMethod];
});
FirstMethod 本身运行在另一个工作线程上,如下所示
-(void)firstMethod
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
//processing here.....
}];
实现它的最佳方法是什么,我无法更改 firstMethod 的定义,因为它是由某些第三方提供的,并且更改它意味着更改调用该方法的许多现有代码
您可以使用完成块。你只需要这样修改firstMethod:
- (void)firstMethodWithOnComplete:(void (^)(void))onComplete {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
//processing here.....
onComplete();
});
}
然后这样使用它:
[self firstMethodWithOnComplete:^{
[self secondMethod];
}];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)