인프런 커뮤니티 질문&답변
Future.cancel() 취소를 사용하는 예가 궁금합니다.
작성
·
32
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
여기에 질문 내용을 남겨주세요.
안녕하세요! 강의 잘 듣고 있는와중에 Future 관련 내용을 보다가 궁금한 점이 생겨서 질문 남깁니다.
cancel() 기능이 필요한 실제 사례가 어떤 것이 있을까요?
Future.cancel() 을 통해 실행을 취소시킬 수도 있다는 것은 이해가 됐습니다. 그런데 cancel() 기능이 필요한 실제 사례가 뭐가 있을지가 연상이 잘 안됩니다.
실제로 작업을 수행하다가 취소 처리를 해야하는 경우가 일단 뭐가 있을지 궁금합니다.
그냥 생각이 드는 건 특정 시간 제한이 지나서인데, 이건 get에 시간제한을 둬서 TimeoutException 하는 걸로 충분할 것 같아서요.
cancel(false) 로 취소는 하되 과정은 수행하도록 내버려두는 케이스는 어떤 경우를 위해 있는건가요?
아예 interrupt로 취소를 시키는 경우는 막상 예시가 떠오르진 않지만 논리적으로 이해가 갑니다. 어떤 작업을 수행하다가 특정 케이스에서는 필요가 없어져서 취소시킬 수 있겠다 싶습니다. 그런데 cancel(false) 로 취소는 하되 그 과정을 수행하도록 내버려둘 필요가 있나 싶어서요.
어차피 cancel을 하면 true/false 어떤걸 넘겨줘도 get 하면 exception이 발생하면서 결과값을 못 얻는데 수행을 하게 내버려 둘 필요가 없을 것 같은데 어떤 경우를 위해 이렇게 구현이 되어 있는 건지 궁금합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
노굴님이 질문하신 Future.cancel() 메소드에 대한 실제 사례와 활용 방안에 대해 설명드리겠습니다.
cancel()기능이 필요한 실제 사례:- 사용자 요청에 따른 작업 취소: 사용자가 처리 중인 작업을 수동으로 취소할 수 있도록 할 때,
Future.cancel()메소드를 사용하여 비동기 작업을 중단시킬 수 있습니다. 예를 들어, 대화형 UI에서 사용자가 “작업 취소” 버튼을 클릭하는 경우가 해당됩니다.
- 프로그램 종료 또는 재시작: 애플리케이션이 종료되거나 재시작되는 상황에서는 작업을 강제로 중단해야 할 수 있습니다. 이때, 현재 진행 중인 작업을 취소하기 위해
cancel()메소드를 사용합니다.
- 리소스 관리: 제한된 리소스를 사용해야 하는 작업에서 필요가 없어진 작업을 중지함으로써 리소스를 효율적으로 활용할 수 있습니다.
- 사용자 요청에 따른 작업 취소: 사용자가 처리 중인 작업을 수동으로 취소할 수 있도록 할 때,
cancel(false)를 사용하는 경우:- 비중단성 수행 보장: 특정 상황에서는 작업이 중단되지 않도록 보장해야 할 경우가 있습니다.
cancel(false)를 사용하면 현재 진행 중인 작업을 강제적으로 중단시키지 않고 이후 get 호출을 통해서 더 이상의 사용을 막고 에러를 처리할 수 있습니다.
- 상태 점검용: 작업이 실제로 중단되었는지 여부를 확인하기 위한 상태값 확인을 위해
cancel(false)를 사용할 수 있으며, 이렇게 사용되면 상태 변경 없이도 코드의 논리적인 흐름을 제어할 수 있습니다.
- 비중단성 수행 보장: 특정 상황에서는 작업이 중단되지 않도록 보장해야 할 경우가 있습니다.
이와 같이, 비동기 처리에서는 상황에 따라 작업을 중단시키거나 유지하도록 유연하게 대응할 수 있도록 cancel() 메서드가 유용하게 사용됩니다. 추가 질문이 있다면 언제든지 문의해 주세요.
관련 내용 문서 및 비동기 문서도 참조해 보시면 좋습니다.





