オプション 1) メソッドへの他の呼び出しが実行されていない場合にのみ -method 内のコードが実行されるように、2 つ目のシリアル キューを追加することは理にかなっていますか?
たとえば、呼び出し元では次のようになります。
mySerialQueue = dispatch_queue_create("com.myapp.my-serial-queue", DISPATCH_QUEUE_SERIAL);
dispatch_async(mySerialQueue, [self method]);
オプション 2) myQueue を並行ではなくシリアルにします (dispatch_barrier_async() は所有している並行キューでのみ機能するため、並行していると思います)。
myQueue = dispatch_queue_create("com.myapp.myqueue", DISPATCH_QUEUE_SERIAL);
dispatch_async(myQueue,^{ CODE 1});
dispatch_async(myQueue,^{ CODE 2});
dispatch_async(myQueue,^{
SOME CODE
dispatch_async(myQueue,^{
WAIT_CODE
dispatch_async(dispatch_get_main_queue(), ^{GUI UPDATE }
});
});
オプション 3) コードを並べ替えて、SOME_CODE の後に WAIT_CODE を追加する
dispatch_async(myQueue,^{ CODE 1});
dispatch_async(myQueue,^{ CODE 2});
dispatch_barrier_async(myQueue,^{
SOME CODE // this code must block
WAIT_CODE // this code must block
dispatch_async(dispatch_get_main_queue(), ^{ GUI UPDATE }
});