Я видел некоторые связанные вопросы, но никто, кажется, не ответил на это. Я хочу написать метод, который будет работать в фоновом режиме. Мне нужен этот метод для вызова обратного вызова завершения в том же потоке/очереди, что и для исходного вызова метода.
- (void)someMethod:(void (^)(BOOL result))completionHandler {
dispatch_queue_t current_queue = // ???
// some setup code here
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
BOOL ok = // some result
// do some long running processing here
dispatch_async(current_queue, ^{
completionHandler(ok);
});
});
Какое волшебное заклинание необходимо здесь, чтобы обработчик завершения вызывался в той же очереди или потоке, что и вызов sameMethod
? Я не хочу принимать основной поток. И, конечно, dispatch_get_current_queue
не используется.