如何强制GCD在主队列上执行当前块?

时间:2014-07-28 09:59:48

标签: ios xcode grand-central-dispatch

我有工作线程任务,使用:

队列上发布结果
// on worker queue

// (long-running task)

// publish results on main queue
dispatch_async(dispatch_get_main_queue(), ^(void) {
    _finished = YES;
});

我如何坐在主队列(主CXTest线程)中并强制gcd处理队列中的当前任务,如:

// on main queue
while (!_finished) {
    [NSThread sleepForTimeInterval:0.1];
    // TODO : force main queue to perform current blocks
}

显而易见的解决方案是在工作线程中设置_finished,但由于某种原因我不能这样做(只能在主线程中触及UI控件)

1 个答案:

答案 0 :(得分:0)

你可以像这样抽出你的跑步循环:

while (!_finished) {
    [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1];
}

最终会耗尽主要队列,将_finished设置为YES

但我建议您使用像XCAsyncTextCase这样的异步测试助手,同时expecta也有非常方便的异步助手。其他测试框架也可能有这样的扩展。