我已經看到一些相關的問題,但似乎沒有人回答這種情況。我想寫一個方法,將在後臺做一些工作。我需要這種方法來調用與原始方法調用相同的線程/隊列的完成回調。dispatch_async並在原隊列中調用完成處理程序
- (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
不會被使用。
你能描述你想要達到什麼樣的?爲什麼你的特定目的對它執行的線程有影響? –
@ChristopherPickslay'someMethod'可能會在某個後臺線程中調用。我希望它可以在同一個線程上調用完成塊,而不是主線程或其他任意後臺線程。 – rmaddy
我明白這一點。問題是爲什麼。是否有某些技術原因需要在特定線程上調用?我只是想,可能會有不同的設計,這將有所幫助。 –