Недавно у меня возникла проблема с использованием GCD. Вот некоторые фрагменты кода:GCD добавить блок в последовательную очередь после изменения состояния
static dispatch_queue_t queue() {
static dispatch_queue_t sl_queue;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sl_queue = dispatch_queue_create("com.somnus.xxx", NULL);
});
return sl_queue;
}
- (void)test
{
while (self.state != finished)
{
//wait for finish
}
dispatch_async(queue(), ^{
self.state = processing;
void (^onFinish)(void) = 0;
onFinish = ^(void){
self.state = finished;
};
[someObj doSomethingWithFinishBlock:onFinish];
});
}
Я хочу, чтобы убедиться, что каждый раз, когда метод испытания() добавить блок в очередь, состояние завершения. Другими словами, при вызове теста проверьте состояние, если вы обнаружите, что состояние обрабатывается, дождитесь его изменения до завершения, затем выполните dispatch_async().
Как я мог реализовать это, спасибо за любую помощь!
EDIT:
doSomethingWithFinishBlock является асинхронная функция, я не знаю, когда onFinish блок будет помещён
Асинхронная функция 'doSomethingWithFinishBlock'? –
@ Cy-4AH Да, doSomethingWithFinishBlock - это асинхронная функция – SomnusLee