メインスレッド上のsuspended
の場合、コルーチンの内部作業に興味があります。本当の質問は、メインスレッド上のコルーチンであるsuspended
関数を記録する方法です。正確に実行が行われている場所はどこですか?それは仮想スレッドですか?
コルーチンを作成する時点でCoroutineName(name:String)
メソッドを使用してコルーチンに名前を付けることができます。
repeat(5) {
GlobalScope.launch(CoroutineName("$it")) {
displayGreetingsFor(it)
}
}
_
コルーチンに与えられた名前を回収するcoroutineContext[CoroutineName.Key]
以下のように:
private suspend fun displayGreetingsFor(i: Int) {
delay(100)
println(
" ${coroutineContext[CoroutineName.Key]} is executing on thread : ${Thread.currentThread().name}"
)
}
_
これはコンソールでO/Pの後に印刷されます。
CoroutineName(0) is executing on thread : DefaultDispatcher-worker-3
CoroutineName(1) is executing on thread : DefaultDispatcher-worker-2
CoroutineName(2) is executing on thread : DefaultDispatcher-worker-8
CoroutineName(3) is executing on thread : DefaultDispatcher-worker-6
CoroutineName(4) is executing on thread : DefaultDispatcher-worker-5
_