해결된 질문
작성
·
15
·
수정됨
0
안녕하세요~ 강의 잘 보고 있습니다. withCheckedContinuation
에서 resume 호출에 대해 질문이 있습니다.
11강의 12:56 쯤에서 'withCheckedContinuation
에서는 resume 을 두번 호출해도, runtime 에서 알아서 두번째 resume 되는걸 체크해서 크래시가 발생하지 않게 해준다고 공식문서에서 나와있다. 즉, 안전하다' 라고 설명을 해주시는데요 (12강에서도 Checked 는 안전하다고 나와있구요),
제가 확인을 해보았을때는 withCheckedContinuation
에서도 resume 을 두번 호출하면 런타임 에러가 발생하는 것을 확인했습니다.
다만 CheckedContinuation과 UnsafeContinuation 의 케이스별 에러 로그 / 콘솔 로그가 조금 달랐습니다.
애플 문서에서는 checked continuation 만이 오용(misuse)에 대한 detect 및 diagnose 를 제공한다고 되어있는데요, 이를 통해 제가 유추할 수 있는건 withCheckedContinuation
은 런타임에 "안전" 하다기 보다는, resume 을 잘못 사용했을때 좀 더 자세한 에러 로그(여러번 호출시) 및 콘솔 로그(미호출시)를 통해 개발자가 resume 을 한번만 올바르게 호출할 수 있도록 도와주는 역할을 한다는 것이었습니다.
혹시 withCheckContinuation
에 대해 강의해서 설명해주신 "안전" 의 의미와, "두번째 resume 되는걸 체크해서 크래시가 발생하지 않게 해준다" 의 문서 레퍼런스를 알 수 있을까요?
참고로 체크한 코드는 다음과 같습니다
func fetchGreeting(completion: @escaping (Result<String, MyError>) -> Void) {
completion(.success("hello"))
}
enum MyError: Error {
case bye
}
func asyncFetchGreeting() async throws -> String {
let greeting = try await withCheckedThrowingContinuation { continuation in
fetchGreeting { greeting in
continuation.resume(with: greeting) // 📍 resume 호출부
}
}
return greeting
}
Task {
do {
let greeting = try await asyncFetchGreeting()
} catch {
}
}
감사합니다.
답변 1
1
아 네네, sujinnaljin 님.
강의 내용이 잘못된 것 같네요!
공식 문서 내용을 저도 다시 확인해보니, 해당 부분에 대한 내용을 제가 자세하게 체크하지 못한 부분이 있네요! 말씀하신 내용이 맞습니다 ^^;
(아마 저도 초반 학습 할 때의 내용에 대해 추후에 자세하게 살펴보진 않아서 더블 체크를 못했던 부분이네요.)
강의 내용, 교재 내용도 수정해 놓아야 겠네요!
알려주셔서 감사합니다 :)