我試圖根據需要異步處理方法,一旦第一個方法完成,只有第二個方法應該開始執行。問題是第一種方法本身具有在後臺線程上運行的代碼。多線程:只有在完成執行其他方法後才執行方法調用
我試過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的定義,因爲它通過一些第三方提供,也改變它意味着改變很多從那裏這種方法被調用現有的代碼
目前基本上沒有辦法做到你的要求,除非第三方庫提供了一些方法來檢測當私人塊完成執行時。可以? – 2013-05-09 23:01:17
rob:不,它不能提供任何方法來查找私有塊的完成時間 – iHS 2013-05-09 23:18:05
您可以總結私有異步塊的功能嗎?特別注意任何文件系統/網絡交互。 – 2013-05-24 20:03:42