동시 DispatchQueue
은 코드가 즉시 반환되므로 호출 스레드를 차단하지 못한다는 것을 알게되었습니다. 대개 큰 데이터를로드하는 백그라운드 작업과 함께 사용됩니다.완성 처리기를 DispatchQueue와 함께 사용
완료 핸들러 (예 : URLSession
)를 사용하면 일부 작업이 완료된 후에 핸들러 내부의 코드를 실행할 수 있습니다.
제 질문은 : 그것은 동시 디스패치 대기열과 완료 처리기가 중복 목적을 가지고 있다는 것을 의미합니까? 완료 핸들러를 이미 사용한 경우 동시 디스패치 큐로 마무리 할 필요가 없습니다.
예를 들어 URLSession을 사용하여 시간이 많이 소요되는 데이터로드 작업은 다음과 같습니다. 동시 디스패치 대기열로 포장하는 것이 좋습니다.
URLSession(configuration: URLSessionConfiguration.default).dataTask(with: propertiesRequest) { data, response, error in
// print("within dataTask: data: \(data), response: \(response), error: \(error)")
if let error = error {
print(error)
} else if let httpResponse = response as? HTTPURLResponse {
if httpResponse.statusCode == 200 {
print("success: property task request")
do {
handler(responseDict, nil) // This is a function supplied by caller
} catch let error as NSError {
handler(nil, error)
}
}
}
}
'error'가 nil이 아니거나 상태 코드가 200이 아니면 완료 처리기를 호출했는지 확인해야합니다. 호출자는 의심 할 여지없이 요청의 완료 여부, 성공 여부 등을 알고 싶어합니다. – Rob
@ Rob 동의합니다. 내 프로젝트에서 이것을 채택 할 것이다. – modeller