중지 컨텍스트 내에서 잠재적으로 문제가 될 수 있는 묵시적 CoroutineScope 리시버의 액세스를 보고합니다.
중단 함수나 람다가 외부 컨텍스트에서 묵시적 CoroutineScope 리시버를 포착할 경우, 예상치 못한 동작이 발생할 수 있습니다.
이는 중단 함수가 아직 실행 중일 때 포착된 스코프가 취소되거나 완료될 수 있기 때문입니다.
검사는 중단 함수나 람다 내부에서 코드가 묵시적으로 CoroutineScope 리시버에 액세스하여 외부 스코프에 잠재적으로 위험한 종속성을 생성하는 상황을 탐지합니다.
예:
class MyClass {
fun CoroutineScope.launchJobs() {
launch { // 허용: 확장 함수 내 직접적 사용
doSomething()
}
suspendingFunction { // 경고: 의심스러운 묵시적 'CoroutineScope' 리시버 액세스
launch { // launch 호출이 외부 컨텍스트의 묵시적 CoroutineScope를 사용
doSomethingElse()
}
}
}
}
옵션:
이 문제를 해결하는 방법은 다음과 같습니다.
this@receiverLabel.method()를 사용하여 리시버를 명시적으로 지정합니다.coroutineScope { } 빌더를 사용하여 중단 함수의 유효 기간에 결합된 하위 스코프를 생성합니다.