NSURL 异步请求会卡住,直到上一个 api 调用完成。 我们的项目需要将视频上传到服务器,我们正在使用 GCD 执行此操作。但是,在上传完成之前,UI 不应该被卡住。因此,也可以调用其他一些 api。但是,在调用其他api时,这些新的api调用在队列中等待视频上传api调用完成。
申请流程如下:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//api call for video upload is an NSMutableUrlRequest with Asynchronous completion handler.
dispatch_async(dispatch_get_main_queue(), ^{
//UI operations
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//simple api call for getting minimal data/ validation --- (Problem - This api is getting freeze until the video upload to complete).
});
});
});
最佳答案
如果您不希望最里面的调度等待视频完成,请将其移到该调度 block 之外,例如:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//api call for video upload is an NSMutableUrlRequest with Asynchronous completion handler.
dispatch_async(dispatch_get_main_queue(), ^{
//UI operations
});
});
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//simple api call for getting minimal data/ validation
});
我必须说,最初的构造似乎暗示了视频和数据验证调用之间存在某种隐含的依赖关系,但如果没有,您可以使用类似上述的方法。如果您需要知道这两个独立的异步任务何时完成,您可以使用调度组。
关于ios - 在后台队列中运行多个 api 调用而不卡住 UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27377048/