协程在Dispatchers上启动。Main在挂起时不会阻塞主线程。这是什么意思?所以当暂停功能在主线程上启动时,如果有一些行需要花费更长的时间,它会自动分配给新线程吗?这令人困惑吗?
Dispatchers.Main
是一个CoroutineContext,它将协程分派到主线程中,但是当协程本身挂起时,即通过更改上下文或线程或其他某种原因,则“主线程变为空闲”,并且幕后的Continuation
对象为负责随后继续执行。
由于挂起时主线程上没有正在运行的任务,因此它是自由的,并且能够由上下文(分派器)承担其他任务,因此由于没有被阻塞而被记录在案。