中断コンテキスト内からの潜在的に問題のある暗黙の CoroutineScope レシーバーアクセスを報告します。
中断関数かラムダが外側のコンテキストから暗黙の CoroutineScope レシーバーをキャプチャしていると、予期しない動作が発生する可能性があります。
これは、キャプチャ対象のスコープが中断関数の実行中にキャンセルまたは完了される可能性があるためです。
このインスペクションはコードが中断関数かラムダ内から暗黙的に CoroutineScope レシーバーにアクセスしており、外側のスコープへの潜在的に危険な依存関係を生じさせている状況を検出します。
例:
class MyClass {
fun CoroutineScope.launchJobs() {
launch { // OK: 拡張関数内での直接的な使用
doSomething()
}
suspendingFunction { // 警告: 疑わしい暗黙的な ‘CoroutineScope’ レシーバーアクセス
launch { // launch の呼び出しは外側のコンテキストの暗黙的な CoroutineScopeを使用しています
doSomethingElse()
}
}
}
}
オプション:
この問題を解決するため、次の操作を実行できます:
this@receiverLabel.method() を使用してレシーバーを明示的に指定するcoroutineScope { } ビルダーを使用し、suspend 関数のライフサイクルに関連付けられた子スコープを作成する