相关疑难解决方法(0)

如何等待异步调度块完成?

我正在测试一些使用Grand Central Dispatch进行异步处理的代码.测试代码如下所示:

[object runSomeLongOperationAndDo:^{
    STAssert…
}];
Run Code Online (Sandbox Code Playgroud)

测试必须等待操作完成.我目前的解决方案如下:

__block BOOL finished = NO;
[object runSomeLongOperationAndDo:^{
    STAssert…
    finished = YES;
}];
while (!finished);
Run Code Online (Sandbox Code Playgroud)

看起来有点粗糙,你知道更好的方法吗?我可以通过调用暴露队列然后阻塞dispatch_sync:

[object runSomeLongOperationAndDo:^{
    STAssert…
}];
dispatch_sync(object.queue, ^{});
Run Code Online (Sandbox Code Playgroud)

......但是这可能会暴露太多object.

unit-testing objective-c grand-central-dispatch

177
推荐指数
6
解决办法
11万
查看次数