在什么“边界”情况下可以使用协程Unconfined dispatcher执行?
Unconfined dispatcher 是一种高级机制,可以在某些极端情况下提供帮助,即不需要为以后执行而调度协程或产生不希望的副作用,因为必须立即执行协程中的某些操作。
据我了解,它转换为:“无限制调度程序是一种高级机制,在某些情况下可能有用需要马上执行。”
我是否正确理解这意味着应该在不需要使用延迟或类似机制延迟协程执行的情况下使用此调度程序?为什么进一步写出 Unconfined dispatcher 不应该在共享代码中使用?
我也不清楚挂起函数如何确定线程,在调用它之后,执行用 Dispatchers.Unconfined. 同一篇文章的一个例子:
fun main() = runBlocking<Unit> {
launch(Dispatchers.Unconfined) { // not confined -- will work with main thread
println("Unconfined : I'm working in thread ${Thread.currentThread().name}")
delay(500)
println("Unconfined : After delay in thread ${Thread.currentThread().name}")
}
}
结论:
Unconfined : I'm working in thread main
Unconfined : After delay in thread kotlinx.coroutines.DefaultExecutor
函数是如何delay()确定协程下一次执行的线程的kotlinx.coroutines.DefaultExecutor?
你读过那里的一切吗?
换句话说,对于不需要资源并且不关心它们在哪里执行的任务。据我了解,它是为了节省切换而发明的。