0

为什么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

4

1 回答 1

2

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

于 2012-07-03T06:28:33.870 回答