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