假设我们有 NSOperation A 和 NSOperation B。B 依赖于 A 的完成并由于A.completionBlock
被调用和完成而执行一些设置。这意味着B.addDependency(A)
在 A 完成之前无法构造 B。因此,我们选择A.waitUntilFinished()
在构建和启动 B 之前在单独的线程上使用。
但是,由于 A 的 completionBlock 是在不同的线程上调用的,我们之前A.waitUntilFinished()
调用unblocks的线程已经完成执行,因此在 B 的构造中,必要的先决条件尚未完成。 A.completionBlock
因为苹果 NSOperation API 不提供任何控制在哪里A.completionBlock
分派,处理这个问题的常用方法是什么?
编辑:
到目前为止,我尝试过的选项是将 NSOperation B 包装在 NSBlockOperation C 中,然后调用C.addDependency(A)
以便在 A 完成之前不构造 B。但是,这仍然不能解决问题,因为仍然必须在 NSBlockOperation C 中调用异步启动,并且完成块仍然会飞到另一个线程。