最近,我一直在阅读很多文章,并观看了很多关于Kotlin协同例程的视频,尽管我付出了很多努力,但我仍然无法理解它们.
我想我终于找到了一种方法来说明我的问题:
class Myviewmodel() : CoroutineScope {
override val coroutineContext = Dispatchers.Main + Job()
fun foo() = launch(handler) {
Log.e("test","A")
}
}
class MainActivity : Activity() {
override fun onCreate() {
Mainviewmodel().foo()
Log.e("test","B")
}
}
输出为:
E/test: B
E/test: A
而且我不知道怎么回事,我只使用一个线程(主线程).如果我的代码按顺序执行,那么到我到达log(B)…行时,log(A)应该已经被打印了.
协程库是否在内部使用其他线程来完成此任务?这是我能提出的唯一解释,但在文档中没有找到任何说明.
PS:很抱歉将android混入其中,但是此代码:
fun main() {
GlobalScope.launch(Dispatchers.Unconfined) { // launch new coroutine in background and continue
print(Thread.currentThread().name + "World!") // print after delay
}
(0 .. 1000).forEach { print(".") }
}
似乎按预期工作并打印:
main @ coroutine#1World!………………………………
因为1个线程==顺序工作
希望我的问题有意义,感谢您的阅读!