2012-07-03 58 views
0

爲什麼需要代碼if (dispatch_get_current_queue() == socketQueue)?爲什麼我們不能直接使用dispatch_sync(socketQueue, block)關於調用dispatch_queue_t和dispatch_sync

在此先感謝!

- (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; 
} 

BTW,代碼是從XMPPFramework

回答

2

你不能叫dispatch_sync對當前串行隊列調度模塊,因爲這會死鎖。 Dispatch_sync會一直等到塊完成執行,但在當前塊完成運行之前,它永遠不會開始運行。

+0

嗨史文,再見。 有點不清楚。 dispatch_async怎麼樣,如果block改變了__block的值,怎麼可能是async ??? – Henry