我已经看到一些相关的问题,但似乎没有人回答这种情况。我想写一个方法,将在后台做一些工作。我需要这种方法来调用与原始方法调用相同的线程/队列的完成回调。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
我明白这一点。问题是为什么。是否有某些技术原因需要在特定线程上调用?我只是想,可能会有不同的设计,这将有所帮助。 –