关于调用dispatch_queue_t和dispatch_sync

为什么需要代码if (dispatch_get_current_queue() == socketQueue) ? 为什么我们不能直接使用dispatch_sync(socketQueue, block)

提前致谢!

 - (BOOL)isConnected { __block BOOL result = NO; dispatch_block_t block = ^{ result = (flags & kConnected) ? YES : NO; }; if (dispatch_get_current_queue() == socketQueue) block(); else dispatch_sync(socketQueue, block); return result; } 

顺便说一句,代码是从XMPPFramework

您不能调用dispatch_sync来调度当前串行队列上的块,因为这会死锁。 Dispatch_sync等待块完成执行,但在当前块完成运行之前,它将永远不会开始运行。