강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của 111sym9317
111sym9317

câu hỏi đã được viết

Hoàn toàn chinh phục Kotlin Coroutine

Thời gian xác nhận hủy coroutine

Coroutine 취소 시점 체크

Đã giải quyết

Viết

·

128

·

Đã chỉnh sửa

1

isActive라는 확장 프로퍼티를 이용해서 일시 중단 시점을 만들지 않고도 확인할 수 있다는 내용은 이해했습니다.

다만 본 강의의 예시에서는 while문을 통해서 계속해서 isActive를 확인해서 취소된 걸 곧바로 알 수 있었지만,


만약 실무에서 coroutine내에 어떤 로직들이 길게 적혀 있다면, 한 줄 한줄 마다 if 문을 통해 isActive를 확인해야 하는 코드가 들어가야 하는 걸까요? 아니면 조금 비효율적인 것을 감안하고 yield 같은 함수를 중간 중간에 넣어두어야 하는 걸까요?

androidkotlincoroutinekotlinx.coroutinesandroid-coroutine

Câu trả lời 2

2

seyoungcho2님의 프로필 이미지
seyoungcho2
Người chia sẻ kiến thức

111sym님 안녕하세요. 지식 공유자 조세영입니다.

일반적인 경우에는 코루틴 내에 로직들이 길게 적혀 있다면, IO 작업 등에서 코루틴이 일시 중단되면 취소가 체크되기 때문에 한 줄 한 줄 마다 isActive를 확인할 필요가 없습니다.

이런 체크가 필요한 경우는 일반적으로 취소를 체크할 수 있는 시점이 없는 CPU 집약적인 작업 혹은 완료되기 전 다시 한 번 취소를 체크해야 하는 코루틴의 경우 등 입니다.

정리하면 모든 줄에서 취소를 확인할 필요는 없으며, 다음 작업 전에 취소 체크가 명시적으로 필요한 부분에 한해 한정적으로 사용하는 것이 좋습니다.

 

좋은 질문 남겨 주셔서 감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 111sym님.

코루틴의 작업 취소와 관련된 질문을 주셔서 감사합니다. isActive 확장 프로퍼티를 통해 코루틴이 취소되었는지 확인하는 방법은 유용하지만, 모든 코드 줄마다 체크하는 것은 비효율적일 수 있습니다. 실무에서 코루틴 내에서 효율적으로 취소를 확인하기 위한 방법을 살펴보겠습니다.

코루틴 취소 점검 방법

  1. 일시 중단 함수 사용: 대부분의 표준 일시 중단 함수는 코루틴의 취소를 자동으로 체크합니다. 따라서 이러한 함수(예: delay, withTimeout)를 사용하면, 직접적으로 isActive를 자주 사용할 필요가 없습니다.

  2. 주기적인 체크: 특정 구역 내에 주기적으로 yield()를 호출하여 취소가 요청되었는지 확인할 수 있습니다. 이 방법은 긴 루프 또는 많은 논리 코드가 실행될 때 적합합니다.

   while (isActive) {
       // 작업 수행
       yield() // 취소 체크
   }
  1. 예외를 통한 취소 처리: 코루틴이 취소되면 CancellationException이 발생합니다. 이를 통해 전체 로직을 간결하게 유지하면서도 한 번에 취소를 처리할 수 있습니다.
   try {
       // 긴 작업 수행
   } catch (e: CancellationException) {
       // 작업 중지 및 필요한 정리 작업 수행
   }
  1. 구간 나누기: 긴 로직은 여러 구간으로 분리하고 각 구간마다 취소 여부를 체크하는 것이 좋습니다. 이렇게 하면 코드 관리가 용이해지며, 취소도 효율적으로 처리할 수 있습니다.

  2. 구조화된 동시성: 코루틴을 각기 다른 구조로 나누고, coroutineScopesupervisorScope를 활용하여 전체 로직을 관리하면, 코루틴이 취소될 상황에서 자연스럽게 스코프를 종료할 수 있습니다.

참고 자료

추가적으로 코루틴의 취소와 관련하여 다음 참고 자료가 유용할 수 있습니다:
- 코틀린 코루틴 공식 문서
- 관련 강의 질문과 답변 - 코루틴의 취소 체크 방법에 대한 실무적인 조언이 포함되어 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Hình ảnh hồ sơ của 111sym9317
111sym9317

câu hỏi đã được viết

Đặt câu hỏi