작성
·
39
0
📌 자주하는 질문 모음
자주하는 질문을 먼저 확인 부탁드리며, 질문은 최대한 구체적으로하셔야 빠르게 답변드릴 수 있습니다.
[질문 예시]
(1) 몇강, 몇초의 내용이 잘 이해가 안갑니다. (제가 적어놓은 강의 번호 "10강, 7분 강의 내용 중에... " )
(2) 강의자료 몇페이지의 내용이 잘 이해가 안갑니다.
(3) 정확하게 어떤 포인트에 대한 내용이 이해가 안갑니다. 다시 설명해주실 수 있나요?
29강 17:10 ~ 18:00 사이 내용에 질문이 있습니다.
CASE2에서 배열이나 튜플로 구현하는 경우 취소 전파가 늦게 된다고 적혀있고 설명도 그렇게 해 주시는데, CASE1에 비해 취소 전파가 늦게 될 수 있다고 이해가 되는데요.
CASE2는 CASE1에 비해 try await
을 연달아서 사용하지 않아도 된다는 점만 다르고, 나열하는 순서대로 실행되는 동작 자체는 동일한것 같은데 두 case가 실제로 차이가 있는건가요? 두 case가 완전히 동일하게 동작하는 것 같은데 차이가 있는 것처럼 설명하시는것 같아서 제가 잘못 이해한 것인지 궁금합니다.
답변 1
0
네 안녕하세요 joey !
제가 CASE 1 , CASE 2 에서 말씀드리려고 하는 포인트는, async let의 암시적취소에서는 코드 순서의 배치가.. 암시적 취소 전파에 중요한 영향을 미칠 수 있다는 점에 대해서 말씀드리려고 하는 거예요 !
암시적 취소: 하나의 자식 작업에서 에러가 발생했을 때, 나머지 다른 자식 작업에 에러를 전파하는 경우
예를 들어 아래처럼 튜플로 구현하실때,
image3를 가장 먼저 배치 시키시면, (아무리 튜플이라고 하더라도) 튜플의 첫번째 요소를 가장 먼저 기다린 후에.. 그 다음 image3 -> image1 -> image2 -> image4 -> image5 로 넘어갑니다.
(여기서 image3가 에러를 발생시키고 가장 일찍 종료가 되는 경우임)
let fetchedImages = try await (images3, image1, image2, image4, image5)
따라서, 위처럼 구현하시는 것은 아래의 코드와 순서가 완전히 동일합니다. (동일하게 동작할 수 밖에 없습니다. image3가 가장 먼저 배치되어 있고, 코드는 "순서대로"만 기다리게(동작하게) 됩니다.)
let fetchedImage3 = try await image3
let fetchedImage1 = try await image1
let fetchedImage2 = try await image2
let fetchedImage4 = try await image4
let fetchedImage5 = try await image5
따라서 순서를 동일하게 배치하면 완전히 동작이 똑같은 순서대로 동작하겠지만.. 예를 들어 튜플 순서를 아래처럼 1 -> 2 -> 3 -> 4 -> 5 로 배치시키시면, 동작이 달라질 수 있다는 것을 설명드리기 위한 예제입니다.
let fetchedImages = try await (images1, image2, image3, image4, image5)
이점을 잘 생각해보시면 좋을 것 같아요!
고맙습니다. :)
답변 감사합니다!
그럼 "배열 또는 튜플의 순서에 따라 취소가 늦게 전파될 수도 있다"라고 이해하면 되는걸까요?