문제의 원인
for 루프는 비동기 콜백을 사용하여 이미지를 다운로드합니다. 그러나 비동기 호출이 완료될 때쯤이면 for루프가 이미 종료되어 i 변수는 루프의 마지막 값으로 설정됩니다. 따라서 콜백 안에서 i를 참조하면 모든 콜백이 동일한 i값을 참조하게 되어 마지막 값으로 덮어씌워지게 됩니다.
클로저를 이용한 해결 방법
for루프에서 int index = i;를 통해 현재 인덱스를 새로운 변수 index에 저장합니다. 이렇게 하면 index 변수는 각 반복에서 교유한 값을 갖게 되어 비동기 콜백 안에서 사용될 때 올바른 값을 참조합니다.
왜 클로저가 필요한가?
클로저는 함수가 선언될 때의 환경을 기억하는 특성을 갖습니다. 따라서 비동기 함수가 나중에 호출되더라도, 그 함수는 자신이 생성될 때의 index 값을 정확히 알고 올라브게 실행할 수 있기 때문입니다.
'C#' 카테고리의 다른 글
[C#] 구조체(Struct) vs 클래스(Class) (0) | 2024.08.15 |
---|---|
[C#] 상속 키워드 (0) | 2024.08.13 |
[C#] API를 호출할 때 "Malformed URL" 오류가 발생하는 이슈 (0) | 2024.08.12 |
[C#] 빈 문자열인지 확인하는 방법 (0) | 2024.08.08 |
[C#] Static이란 무엇인가? (0) | 2024.08.06 |