2016년 12월 22일 목요일

Alamofire에서 사용하는 Queue에 대한 정리


  • SessionManager의 backgroundCompletionHandler
    • background transfer가 끝났을 때 'DispatchQueue.main.async'로 실행된다.
  • Upload
    • 정상적인 경우의 실행은 'DispatchQueue.global(qos: .utility).async' 로 이루어진다.
    • encodingCompletion은 정상적으로 upload가 완료되었을 때나 중간에 에러가 발생했을 때에나 항상 'DispatchQueue.main.async'에서 실행된다.
  • Retry
    • (request, download, upload)중 에러가 발생하면 allowRetrier를 호출하는데 이 함수의 내용은 'DispatchQueue.global(qos: .utility).async'를 통해 asynchronous로 실행된다. 그리고 should() 함수의 completionHandler의 구현에서 retry를 'DispatchQueue.global(qos: .utility).asyncAfter()'에서 실행한다.
    • URLSession으로부터의 응답이 에러를 포함하고 있어 retry를 확인하는 경우 retrier.should()의 completionHandler가 'DispatchQueue.global(qos: .utility).asyncAfter()' 에서 실행된다.
  • Request
    • 서버 요청을 위한 task(dataTask, downloadTask, uploadTask)를 만들 때 queue를 parameter로 받아서 'queue.syncResult' 로 실행하여 task를 생성한다. parameter로 받는 queue는 SessionManager에서 'DispatchQueue(label: "org.alamofire.session-manager." + UUID().uuidString)' 로 고정되어 있다.
  • Response
    • response handler가 기본으로 실행되는 queue는 'DispatchQueue.main'이다. 하지만 사용자가 지정할 수 있다. async로 호출한다.
  • progress handler
    • 기본은 'DispatchQueue.main'이다. 하지만, 사용자가 직접 queue를 지정해 줄 수 있다. async로 호출한다.

댓글 없음:

댓글 쓰기

Building asynchronous views in SwiftUI 정리

Handling loading states within SwiftUI views self loading views View model 사용하기 Combine을 사용한 AnyPublisher Making SwiftUI views refreshable r...