我想我曾經讀過一次關於在Grand Central Dispatch中的一個調度隊列的前面添加一個塊的方法(所以它不會等待其他正在等待的塊)。但我無法在GCD Reference中找到它。有誰知道這是否可能,如果有的話,怎麼樣?如何將一個塊添加到GCD中的調度隊列的前面?
2
A
回答
3
沒有公共API來「跳」隊列,也沒有從隊列中移除或重新排序先前入隊但尚未執行的塊。如果你只是想要一個以更高優先級執行的塊,你可以將它提交給高優先級的全局併發隊列,但自然而然,通過使用特定隊列提供的任何併發保證將會因此而丟失。除此之外,你將不得不自己實現這個功能。
這樣做的一種方法可能是在dispatch_async
周圍創建自己的包裝,將每個塊包裝到另一個塊中,以便在每個非隊列跳轉塊之前爲「隊列跳轉」塊提供執行機會。人們可以想象爲「跳線」創建第二個連續隊列,這些包裝塊可以相應地暫停和恢復。
但是一般來說,一旦提交,就沒有辦法對GCD隊列中的塊進行重新排序。
2
有一些技術使用目標隊列和暫停,可用於實現與多個相關隊列類似的事情。
WWDC 2011會議「掌握大中央調度」詳細介紹了其中的一個。
相關問題
- 1. 如何從GCD調度隊列中刪除排隊的塊?
- 2. GCD中的調度屏障隊列(iOS)
- 3. 從GCD後臺隊列添加到UIManagedDocument?
- 4. 塊串行調度隊列不執行 - GCD iOS的Objective-C的
- 5. 需要關於使用GCD將塊添加到隊列(objective-c)的建議請
- 6. 如何將一個塊添加到Moodle中頁面的中心?
- 7. 如何使一個串行隊列GCD
- 8. 如何取消上一個GCD塊的前一個塊?
- 9. 相當於GCD串行調度隊列
- 10. 如何將元素一次添加到另一個隊列中?
- 11. 如何確定當前正在運行的異步GCD調度隊列
- 12. 記憶問題,使用在GCD調度隊列塊
- 13. 如何將一個前綴添加到一個大列表中?
- 14. C#隊列 - 如何將結構添加到每個隊列點
- 15. 哪個隊列GCD
- 16. 如何在C#中將隊列添加到隊列<T>?
- 17. 如何拆卸GCD隊列?
- 18. 檢查排隊的GCD塊?
- 19. 相當於iOS 3.x中的GCD串行調度隊列
- 20. iOS GCD:在哪個線程上執行自定義調度隊列?在GCD
- 21. 如何將值添加到我的鏈接列表的前面
- 22. 如何將元素添加到UiPath studio中的隊列中?
- 23. 如何將每個元素添加到隊列中
- 24. 使用GCD創建高優先級的串行調度隊列
- 25. iPhone - GCD發送異步操作的串行調度隊列
- 26. 調用一個調度隊列中的代碼在另一個調度隊列中運行
- 27. 如何將兩個寬度添加到CSS中的一個類
- 28. 將SKAction添加到Sprite隊列運行一個接一個
- 29. GCD調度隊列足以將Core Data上下文限制爲單個線程
- 30. 如何將C++隊列的前項移動到後面?