我们正在实现一个同步系统,其中一些操作会异步发送到 SAP Mobile Platform 服务器,当操作完成时,我们会收到来自专有 SDK 的委托(delegate)调用。
此委托(delegate)方法在随机线程上运行,不使用 GCD。
我们希望发送操作 - 然后等待直到调用委托(delegate)方法,这意味着操作完成 - 然后在完成(或发生超时)时恢复工作。我知道这看起来可能是同步的,但我们不能允许用户在操作尚未完成时修改数据,以确保数据完整性。
Sync ViewController 正在执行一些繁重的同步工作并使用 GCD,并更新 UI 线程中的进度条和一些文本。
现在,当调用委托(delegate)方法时,我们想要调用 Sync ViewController 上的另一个方法,但这个调用显然是在错误的线程中完成的。
我的问题是如何在调用委托(delegate)之前 GCD 执行这些方法的同一个线程中执行这些方法。
我们尝试过的事情:
- 只是调用方法。那么这些方法就会在错误的线程中调用,即委托(delegate)方法所在的线程。
- 在所选线程上发布通知时,我们不知道 Sync ViewController 正在运行的确切线程。
有什么想法吗?
最佳答案
如果您已经在使用 GCD,那么您必须知道正在执行此工作的调度队列,所以这不就是在该队列上同步或异步调度 block 的情况吗 队列?
- (void)someDelegateMethod:(id)someValue {
dispatch_async(self.myDispatchQueue, ^{
[self doInterestingThingWith:someValue];
});
}
关于ios - 从委托(delegate)返回具有 GCD 的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23425211/