dispatch_async 直到返回父线程 returns 才会触发?

dispatch_async doesn't fire until returned parent thread returns?

我的问题是 - dispatch_async 会立即触发吗?我看到创建线程必须 return 在 dispatch_async 触发之前。

我的问题是我试图使对第 3 方库的异步调用看起来是同步的。我知道,我知道......我应该按预期允许这些异步操作 运行 但我正试图在复杂的多线程操作中这样做,我真的别无选择。

这是启动异步调用的内容

-(void)connect
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0) , ^{
        [device connect];
    });

    while(!connectCompleted)
    {
        NSLog(@"Sleeping..");
        [NSThread sleepForTimeInterval:1.0];
    }
}

下面是 [device connect] 成功连接后调用的委托函数:

- (void)didConnect:(BXPrinterController *)controller
printer:(BXPrinter *)printer
{
    connectCompleted = YES;

    NSLog(@"didConnect");
}

有了 dispatch_async 环绕 [device connect] 代表永远不会被解雇;

如果出于某种原因你必须让一个调用看起来是同步的,我建议你首先同步实现它(因为如果人们有足够的延迟你最终会这样做),然后你写一个同步的辅助方法:

Step 1: Create a dispatch_semaphore_t. 
Step 2: Start the asynchronous code, with every code path ending by sending a signal to the dispatch_semaphore_t. 
Step 3: Send a wait to the dispatch_semaphore_t. It wakes up, with no CPU time spent on it at all, just when the asynchronous code finishes. 

Does dispatch_async fire immediately

当然不是!那就是async的意思! "asynchronous"(async 所代表的概念)的整个基础是,这是在未来某个未指定时间运行的代码。同时 调用 dispatch_async 的代码无需等待就继续执行到最后。