2015-03-03 122 views
0

Waiting until two async blocks are executed before starting another block

dispatch_group_async(group, queue,^{ 
... 
}); 

運行任務異步。但我的任務本身async,它調用回調處理程序。

所以,當將我的任務聲明dispatch_group_async上下文中完成

當我的回調被執行時它會被調用嗎?

如果你能提供會發生,直到我的任務將宣告完成將是非常有益的一點是事件的序列

+0

你的意思是「我的任務」 - dispatch_group中的異步任務?調度dispatch_group上的任務的任務是什麼? – Paulw11 2015-03-03 05:50:35

+0

將在dispatch_group_async中執行的塊將具有異步n/w請求 – GJain 2015-03-03 05:52:26

+0

因此,一旦塊將異步網絡請求排隊後,任務將繼續釋放dispatch_group,因此從dispatch_group的角度(以及執行'dispatch_group_notify'或'dispatch_group_wait'),即使網絡活動仍在後臺繼續,任務也將完成。 – Paulw11 2015-03-03 05:55:15

回答

1

如果你發送一個異步任務,說:「任務B」,一個dispatch_group_async裏面,說「任務A「,那麼即使任務B仍可能正在執行,任務A在任務A塊結束時即被視爲完成。

因此,鑑於

dispatch_async_group(group,queue, ^{ 
     [someAsyncTask B]; 
}); 

dispatch_async_group(group,queue, ^{ 
     [someAsyncTask C]; 
}); 

dispatch_async_group(group,queue, ^{ 
     [someAsyncTask D]; 
}); 

dispatch_group_wait(group,10000); 

dispatch_group_wait爲最終dispatch_async_group塊執行完畢後,即使任務B/C/d可能仍在運行將盡快返回。

如果您對任務B/C/D使用同步調度,那麼您的調度組將在B,C & D完成後視爲完成。

+0

非常感謝您......我將清理上面的線程 – GJain 2015-03-03 06:06:39