inflearn logo
강의

Course

Instructor

Allen's Swift Concurrency for Swift 6 (Part-1)

Usage of Continuation (Lecture 11)

withCheckedContinuation 에서 resume 호출의 안정성 보장 질문

Resolved

96

sujinnaljin

8 asked

0

안녕하세요~ 강의 잘 보고 있습니다. withCheckedContinuation 에서 resume 호출에 대해 질문이 있습니다.

11강의 12:56 쯤에서 'withCheckedContinuation 에서는 resume 을 두번 호출해도, runtime 에서 알아서 두번째 resume 되는걸 체크해서 크래시가 발생하지 않게 해준다고 공식문서에서 나와있다. 즉, 안전하다' 라고 설명을 해주시는데요 (12강에서도 Checked 는 안전하다고 나와있구요),

제가 확인을 해보았을때는 withCheckedContinuation 에서도 resume 을 두번 호출하면 런타임 에러가 발생하는 것을 확인했습니다.

스크린샷 2025-09-26 오후 2.10.05.png.webp

다만 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 {
    }
}

감사합니다.

ios swift 동시성 async-await concurrency

Answer 1

1

allen

아 네네, sujinnaljin 님.

강의 내용이 잘못된 것 같네요!

공식 문서 내용을 저도 다시 확인해보니, 해당 부분에 대한 내용을 제가 자세하게 체크하지 못한 부분이 있네요! 말씀하신 내용이 맞습니다 ^^;
(아마 저도 초반 학습 할 때의 내용에 대해 추후에 자세하게 살펴보진 않아서 더블 체크를 못했던 부분이네요.)

 

강의 내용, 교재 내용도 수정해 놓아야 겠네요!
알려주셔서 감사합니다 :)

수강 기간 연장 문의

0

28

1

수강연장부탁드려도될까요..

0

42

2

Combine Playground 에서 실행 시

0

57

2

레디선 테스트코드에서 채널이름은 없어도 되는건가요?

0

39

2

70강 - 글로벌 액터로 격리된 Protocol 을 extension 에서 conform 시 타입 본체의 격리 수준 질문

0

41

1

searchable이 화면 하단에 위치해요

0

61

2

모니터와 synchronized, ReentrantLock, 원자적연산 CAS관련해서 추가적으로 더 깊게 공부했는데 제가 이해한 것이 맞나요??

0

85

1

mac python 3.10 - permission denied

0

54

1

Future cancel기능을 사용했지만 interrupt가 발생하지 않을 때 어떻게 처리해야하나요?

0

73

2

Drawing Cycle 관련 질문

0

72

1

2.스레드 생성과 실행 - 17P 그림 문의

0

74

2

Task 의 default 우선순위 문의 (utility vs medium)

0

70

2

18강 자식 작업의 메타데이터 상속 관련 강의 자료 문의

0

64

1

참고 코드 자료 7-StructuredConcurrency(102, 103줄) 오타?

0

74

3

비동기 반복문은 하나의 thread에서만 동작하게 되나요??

0

92

2

25.05.13일 업데이트 내용 문의

0

117

1

5강 weak self 처리 관련

1

176

2

Task 클로저에서 weak self 미사용에 대해 질문드립니다!

0

162

1

업데이트 예정 강의 공개 일정이 궁금합니다.

1

149

1

29강 async let 작업 취소 부분 질문

1

187

1

Task를 함수 내부에서 사용했을 때 값의 변화를 예상하는 법

0

267

2

파트1 PDF 강의 자료 다운로드

0

187

2

Part 2에 대해서

0

223

1

강의자료 관련 질문

0

307

2