[C#] API로 여러 이미지를 비동기로 호출할때, 이미지가 null인 이슈
C#
2024. 8. 7.

문제의 원인

for 루프는 비동기 콜백을 사용하여 이미지를 다운로드합니다. 그러나 비동기 호출이 완료될 때쯤이면 for루프가 이미 종료되어 i 변수는 루프의 마지막 값으로 설정됩니다. 따라서 콜백 안에서 i를 참조하면 모든 콜백이 동일한 i값을 참조하게 되어 마지막 값으로 덮어씌워지게 됩니다.

 

클로저를 이용한 해결 방법

for루프에서 int index = i;를 통해 현재 인덱스를 새로운 변수 index에 저장합니다. 이렇게 하면  index 변수는 각 반복에서 교유한 값을 갖게 되어 비동기 콜백 안에서 사용될 때 올바른 값을 참조합니다.

 

왜 클로저가 필요한가?

클로저는 함수가 선언될 때의 환경을 기억하는 특성을 갖습니다. 따라서 비동기 함수가 나중에 호출되더라도, 그 함수는 자신이 생성될 때의 index 값을 정확히 알고 올라브게 실행할 수 있기 때문입니다.