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

4ntoine

我有使用以下方法队列上发布结果的工作线程任务

// 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控件)

尼古拉·卡西亚诺夫(Nikolay Kasyanov)

您可以像这样泵送运行循环:

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

最终将耗尽主队列,将其设置_finishedYES

但我建议你使用一个异步测试帮手像XCAsyncTextCase,也expecta有相当得心应手异步帮手。其他测试框架也可能具有此类扩展。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章