1

NSURL 비동기 요청은 이전 API 호출이 완료 될 때까지 고정됩니다. 우리 프로젝트에는 비디오를 서버에 업로드해야한다는 요구 사항이 있습니다. GCD를 사용하여이 작업을 수행하고 있습니다. 그러나 업로드가 완료 될 때까지 UI가 고정되어서는 안됩니다. 그래서 다른 api도 호출 할 수 있습니다. 그러나 다른 api를 호출하는 동안 이러한 새로운 API 호출은 대기열에서 완료되는 동영상 업로드 API 호출 완료를 기다리고 있습니다.백그라운드 대기열에서 UI를 고정하지 않고 여러 개의 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). 

      }); 

    }); 

}); 

답변

0

당신이 AFNetworking을 살펴나요 다음과 같이 응용 프로그램의

흐름은? 요청을 만들기 위해 NSURLConnection/NSURLSession을 사용하며 모두 비동기입니다.

+0

도움을 주셔서 감사합니다.하지만이 단계에서 우리는 AFNetworking으로 마이그레이션 할 수 없습니다. – Vinodh

0

당신은 예를 들어, 비디오의 완성이 나올 때까지 기다리는 것이 파견 블록의 외부로 이동하는 그 안쪽의 파견을 원하지 않는 경우 :

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 

}); 

내가 말을해야

는, 원래의 구조 일부를 제시하는 것 비디오와 해당 데이터 유효성 검사 호출 간의 묵시적인 종속성이 있지만 그렇지 않은 경우 위와 같은 것을 사용할 수 있습니다. 이 두 개의 별도 비동기 작업이 모두 완료된시기를 알아야 할 경우 디스패치 그룹을 사용할 수 있습니다.