dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
while(!weakSelf.isAnotherThreadCompleted && [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]])
;
[weakSelf doSomething];
});
将异步线程以这种方式等待另一个线程是否正确?
答案 0 :(得分:1)
您将停止与DISPATCH_QUEUE_PRIORITY_DEFAULT
对应的全局队列。如果您将其他内容分配给此队列,则在等待完成后才会执行。
此外,我认为在与此调度队列对应的线程中不存在运行循环,因此您将通过调用- currentRunLoop
创建一个运行循环,因为不会附加任何源,它会立即返回值NO
(或者,会有一个随机的运行循环,行为将完全不可预测)。
为什么不在工作线程结束时调用块?或者只使用一种机制(GCD,NSOperation,线程,运行循环)以及与之相关的同步,而不是混合它们?