inflearn logo
강의

講義

知識共有

Kotlin コルーチン完全攻略

コルーチンキャンセル確認時点

cancel 질문드립니다.

解決済みの質問

85

dkdiehdbcjsk jehdb

投稿した質問数 2

1

안녕하세요 강의 잘 듣고 있습니다.

Code4-17에서 dispatchers를 사용하지 않고 코드를 그대로 실행하면 while문 코루틴이 cancel이 되지 않는데 왜 그런걸까요??

메인스레드 1개의 스레드에서만 동작하여 상태를 바꿀 수 없기 떄문일까요??

android kotlin coroutine kotlinx.coroutines android-coroutine

回答 2

2

seyoungcho2

dkdiehdbcjsk jehdb님 안녕하세요. 해당 경우는 launch 코루틴이 메인스레드를 점유 후 양보하지 않기 때문입니다. runBlocking 코루틴에서 cancel이 실행돼야하는데 계속 대기 상태에 머물러서 그렇습니다.

이에 관한 자세한 내용은 이후 강의에서 다루는 코루틴의 양보와 관련된 내용에서 배우실 수 있습니다.

0

communityai8509

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

코루틴을 사용하다 보면 코루틴이 취소되지 않는 경우를 종종 접할 수 있습니다. while 문 내의 코루틴이 cancel로 인해 기대한 대로 종료되지 않는 이유는 보통 두 가지 원인에서 찾아볼 수 있습니다:

  1. 코루틴 취소 협조 여부: 코루틴 내부에서 while 루프와 같은 연산을 막고 있는 경우, 취소가 되지 않을 수 있습니다. 코루틴은 기본적으로 취소가 가능하지만, 명령 실행 도중에는 취소 요청을 받을 수 없습니다. 이를 해결하려면 delayyield와 같은 일시중단 기능을 사용하여 협조적인 취소(cooperative cancellation)를 구현해야 합니다.

  2. 디스패처 관련 문제: Dispatcher를 명시적으로 설정하지 않으면 기본 디스패처가 사용되는데, 이는 코루틴이 동일한 스레드에서 작업을 계속하게 만들 수 있습니다. 메인 스레드에서 실행되는 경우, 스레드를 차단하는 작업 (Thread.sleep, tight loop)이 있으면 취소가 어려울 수 있습니다.

이를 해결하기 위해, while 루프 내에서 어떤 형태로든 일시 중단이 필요한지 확인해 보시고, dispatchers를 적절히 사용하여 스레드 블로킹 상황을 피하시기 바랍니다.

혹시 코드에 delay 등을 사용하여 협조적인 취소를 시도하지 않으셨다면, 코루틴 블록 내 적절한 위치에 추가해 보세요.

관련된 내용을 자세하게 알고 싶으시다면, 협조적 취소와 디스패처 설정 관련 강좌 등을 참고해 보시면 좋을 것 같습니다.

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

CoroutineDispatcher에 대한 질문

0

79

2

코루틴과 JVM이 끝나는 조건에 대해 문의 드립니다.

0

83

2

Job() 생성후 complete을 불러 주어야 하는 경우가 헷깔립니다.

1

66

1

왜 runBlocking 종료로 메인스레드가 종료될까요?

0

120

1

delay 함수 사용 시 스레드 양보

1

127

2

강사님께서 번역해주신 코틀린 코루틴 공식 가이드 문서 문의

2

149

2

Flow와 Channel

1

146

2

[코틀린 코루틴의 정석 책 추첨 이벤트] 강의 구매 기간 관련 문의

1

221

1

[코루틴 테스트 심화] runTest의 스레드 관련 문의

1

164

2

job과 코루틴의 관계?

3

257

2

코루틴의 blocking I/O작업 처리

0

161

2

KTOR Server 에서 delay

0

136

2

CoroutineDispatcher(Default, IO)의 limitedParallelism 관련 질문

1

241

1

suspend 문의 드려요

2

131

2

스레드 양보 예제 + 코루틴/멀티스레드 사용 예시 질문

1

184

2

coroutineScope 관련 질문 및 실제 사용 사례에 대한 질문

1

258

3

Coroutine 취소 시점 체크

1

139

2

spring web mvc 환경에서 coroutine을 사용해보신 경험이 있으신지 궁금합니다.

1

323

2

코루틴이 멀티스레드의 단점을 해결했다는 부분에 대해 질문드립니다.

2

181

1

Dispatcher.IO의 동작원리

0

254

3

실무에서 runBlocking 와 CoroutineScope 실무 사용에 대해

0

238

2

Code3-6에서 imageProcessingDispatcher가 inline으로는 동작하지 않는 이유가 궁금합니다

1

121

2

공유 스레드 풀 질문드려요!

1

158

2

코루틴 이름 출력관련해서 질문이 있습니다!

2

160

1