我们目前有以下方法:
-(void)DoTask{
//METHOD 1
//METHOD 2
//METHOD 3
//METHOD 4
}
我们发现了一个错误,修复程序要求我们确保方法3执行异步。它发生在整个系统中,因此我们希望能够进行简单的修复。有没有办法在我们需要运行Async的代码周围放置某种类型的包装器方法,这样代码流不需要为main方法更改?非常喜欢:
-(void)DoTask{
//METHOD 1
//METHOD 2
//WRAPPER START AROUND METHOD 3 TO MAKE IT ASYNC
//METHOD 3
//WRAPPER END AROUND METHOD 3 AFTER ASYNC HAS FINISHED FOR CODE TO GO ONTO METHOD 4
//METHOD 4
}
答案 0 :(得分:1)
你不能*那样做(你所描述的将是同步,而不是 asyncronous )。
您有几个选择。在方法3的异步操作完成后,您可以调用方法4:
-(void) doTask{
//METHOD 1
//METHOD 2
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//METHOD 3
dispatch_async(dispatch_get_main_queue(), ^{
//METHOD 4
});
});
}
您也可以先调用方法4.
您还可以使用NSOperationQueue
来链接您的操作并设置哪些操作需要其他操作完成。这允许您同时运行多个操作。
* - 从技术上讲,你可以这样做,通过阻止一个线程直到另一个线程完成,但你几乎肯定不应该这样做。