【发布时间】:2013-05-09 22:09:06
【问题描述】:
我正在尝试异步处理方法,根据要求,一旦第一个方法完成,第二个方法才应该开始执行。问题是第一种方法本身具有在后台线程上运行的代码。
我尝试了 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 的定义,因为它是由某些第 3 方提供的,而且更改它意味着更改调用此方法的大量现有代码
【问题讨论】:
-
除非第 3 方库提供某种方法来检测该私有块何时完成执行,否则基本上无法执行您所要求的操作。是吗?
-
rob:不,它不提供任何方法来查找该私有块何时完成
-
你能总结一下私有异步块的作用吗?特别注意任何文件系统/网络交互。
-
有关执行异步任务的通用方法,当它们按顺序完成时会报告,请参阅stackoverflow.com/questions/16226727/…
标签: ios objective-c multithreading objective-c-blocks grand-central-dispatch