コルーチンは実行スレッドを共有します。 runBlocking ビルダーがコルーチンから呼び出されると、元になるスレッドがブロックされ、他のコルーチンがこのリソースを使用できなくなります。 これによりパフォーマンスの問題が発生し、ひどい場合にはスレッドスターべーションが発生する可能性があります。
これは、コルーチンのプリミティブ (suspend 関数またはビルダー) から runBlocking ビルダーへの潜在的なコールスタックを提供します。
例:
suspend fun main() {
foo()
}
fun foo() {
runBlocking { suspendFunction() }
}
可能な解決策:
suspend fun main() {
foo()
}
suspend fun foo() {
suspendFunction()
}
仮想関数の解析を構成するには、「オーバーライドを含む関数を調べる」オプションを使用します。