/ / GCDのディスパッチキューの先頭にブロックを追加するにはどうすればよいですか? - アイオス、ココア、並行性、グランドセントラルディスパッチ

GCDのディスパッチキューの先頭にブロックを追加するにはどうすればよいですか? - アイオス、ココア、並行性、グランドセントラルディスパッチ

私は、Grand Central Dispatchのディスパッチキューの先頭にブロックを追加する方法について一度読んでいると思います(それで、保留中の他のブロックを待つことはありません)。 GCDリファレンス。これが可能かどうか誰にも分かりますか?

回答:

回答№1は4

キューを「ジャンプ」するパブリックAPIやキューから以前にエンキューされたがまだ実行されていないブロックを削除または並べ替えます。ブロックを他のブロックよりも高い優先度で実行したい場合は、優先度の高いグローバル並行キューにブロックを送信できますが、特定のキューを使用して並行性保証を行うことは当然可能性があります。それを超えて、この機能を自分で実装する必要があります。

これを行う1つの方法は、独自のラッパーを使用することです dispatch_async 別のブロック内の各ブロックをラップして「キュー・ジャンプ」は、キュー・ジャンプされていないすべてのブロックの前に実行するチャンスをブロックします。これらのラッパーブロックが中断してそれに応じて再開できる「ジャンパー」用の第2のシリアル待ち行列を作ることを想像することができます。

しかし、一般に、一度提出されると、GCDキュー内のブロックを並べ替える方法はありません。


回答№2については2

ターゲットキューとサスペンドを使用するテクニックがあり、複数の相互に関連するキューと同様のものを実装するために使用できます。

WWDC 2011の「Mastering Grand Central Dispatch」セッションでは、これらのいずれかについて詳細に説明しました。