Widziałem kilka powiązanych pytań, ale nie wydaje się, aby odpowiedzieć na tę sprawę. Chcę napisać metodę, która będzie działała w tle. Potrzebuję tej metody, aby wywołać wywołanie zwrotne zakończenia w tym samym wątku/kolejce, który był używany w pierwotnym wywołaniu metody.dispatch_async i wywoływanie procedury obsługi zakończenia w oryginalnej kolejce
- (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);
});
});
Co magiczne zaklęcie konieczna jest tu więc handler zakończenie nazywa się w tej samej kolejce lub wątku jako wezwanie do sameMethod
? Nie chcę zakładać głównego wątku. I oczywiście nie należy używać dispatch_get_current_queue
.
można opisać to, co próbujesz osiągnąć? Dlaczego ma znaczenie dla twoich szczególnych celów, w jaki wątek jest wykonywany? –
@ChristopherPickslay 'someMethod' może zostać wywołany w wątku w tle. Chcę to tak, że blok zakończenia jest wywoływany w tym samym wątku, a nie główny wątek lub inny arbitralny wątek tła. – rmaddy
Rozumiem to. Pytanie brzmi: dlaczego? Czy jest jakiś techniczny powód, dla którego należy go wywołać w konkretnym wątku? Po prostu myślę, że może istnieć inny projekt, który mógłby pomóc. –