들어가며비동기 화면을 구현하다 보면 이런 문제를 자주 만난다.사용자가 리스트에서 아이템을 빠르게 여러 번 선택하면,늦게 도착한 예전 요청의 응답이 가장 최근에 선택한 화면을 덮어쓴다.전형적인 Race Condition이다. Task.isCancelled로 막을 수 있을 거라 생각했는데, 처음 짠 코드는 체크 위치가 틀려서 막지 못했다. 이 글은 그 실수가 왜 실수였는지, cooperative cancellation의 동작 원리부터 짚어가며 정리한 글이다.구현하려는 상황다음과 같은 화면을 가정해보자.리스트에서 아이템을 선택할 때마다 상세 데이터(사진, 리뷰)를 비동기로 불러와 보여준다아이템을 다시 선택하면 이전 요청은 취소하고 새 요청을 시작해야 한다상세 데이터는 fetchPhoto, fetchReview..