我有一個異步函數塊:的iOS GCD同步與異步模塊
[self performAsyncTaskCompletion:(void(^)())
{
//Do Something
}
];
我需要調用這個函數很多次,但以同步的方式。我試圖使用GCD隊列:
dispatch_queue_t queue = dispatch_queue_create("com.MyApp.task", NULL);
for (int i = 0; i < array.count; i++)
{
dispatch_sync(queue, ^{
[self performAsyncTaskCompletion:(void(^)())
{
//Do Something
}
];
});
}
但它不工作,因爲dispatch_sync只是在等待塊的結尾。 如何讓它等待塊中的異步函數結束?
這些'performAsyncTaskCompletion'塊可以相互並行運行嗎?或者你需要等待前一個完成。另外,我知道你在等待塊的末尾,但這總是錯誤的模式。通常我們讓它異步運行,但是隻需指定一個代碼塊,當所有其他調度塊完成時,它將運行。那對你有用嗎? – Rob
是的,那就是我想要做的。實際上,我想從Web服務器下載(異步)一堆不同的JSON文件。想象一下,每個JSON都會引導我去下載另一個JSON。有可能我已經下載了下一個JSON,所以我只需要執行同步任務就可以從數組中獲取它。所以,JSON下載應該是同步的。最後,我需要一個塊,說「好吧,一切都被下載」。我應該使用什麼樣的模式? – Aladin
你說「想象每個JSON引導我到另一個」。你是說每個人都真正依賴前一個?通常情況下,人們希望最大限度地提高併發性,但是如果每個JSON都需要來自之前的數據,那就限制了您。 – Rob