選項1) 添加第二個串行隊列是否有意義,這樣-method中的代碼僅在沒有其他方法調用正在執行時才運行?
例如,在主叫方將您有:
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
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 }
});