2014-06-11 61 views

回答

3

沒有公共API來「跳」隊列,也沒有從隊列中移除或重新排序先前入隊但尚未執行的塊。如果你只是想要一個以更高優先級執行的塊,你可以將它提交給高優先級的全局併發隊列,但自然而然,通過使用特定隊列提供的任何併發保證將會因此而丟失。除此之外,你將不得不自己實現這個功能。

這樣做的一種方法可能是在dispatch_async周圍創建自己的包裝,將每個塊包裝到另一個塊中,以便在每個非隊列跳轉塊之前爲「隊列跳轉」塊提供執行機會。人們可以想象爲「跳線」創建第二個連續隊列,這些包裝塊可以相應地暫停和恢復。

但是一般來說,一旦提交,就沒有辦法對GCD隊列中的塊進行重新排序。

2

有一些技術使用目標隊列和暫停,可用於實現與多個相關隊列類似的事情。

WWDC 2011會議「掌握大中央調度」詳細介紹了其中的一個。

相關問題