У меня есть несколько потоков, и как только все они закончены, мне нужно вызвать метод myMergeBlock
ровно один раз за действие. Я не могу использовать dispatch_once
, потому что я хочу, чтобы иметь возможность позвонить myMergeBlock
в более позднее время.iOS Обеспечение функции вызывается только один раз за сеанс
Некоторые псевдо-код выглядит следующим образом, но еще не поточно:
BOOL worker1Finished, worker2Finished, worker3Finished;
void (^mergeBlock)(void) = ^{
if (worker1Finished && worker2Finished && worker3Finished)
dispatch_async(queue, myMergeBlock); // Must dispatch this only once
}
void (^worker1)(void) = ^{
...
worker1Finished = YES;
mergeBlock();
}
void (^worker2)(void) = ^{
...
worker2Finished = YES;
mergeBlock();
}
void (^worker3)(void) = ^{
...
worker3Finished = YES;
mergeBlock();
}
Кроме того, на основе, как рабочие называются, я не называю их непосредственно, но вместо того, чтобы передать их в функцию как аргументы.
Почему это не работает? Кажется, все в порядке. – CodaFi