gpt4 book ai didi

async-await - 挂起函数如何不阻塞主线程?

转载 作者:行者123 更新时间:2023-12-02 04:20:00 25 4
gpt4 key购买 nike

在 Dispatchers.Main 上启动的协程在挂起时不会阻塞主线程。
这是什么意思?
那么当挂起功能在主线程上启动时,有些行需要更长的时间,它会自动分配给新线程吗?
这令人困惑吗?

最佳答案

挂起的函数会像任何普通函数一样在一个线程上运行,但是当它切换到另一个线程时不会阻塞主线程。
一个正常的函数,当从主线程切换到后台线程时,它必须阻塞主线程,因为它执行后不知道从哪里继续。

    ...
val result = getResult() // This blocks the main thread due to join
use(result);

fun getResult(): String {
var result: String = ""
val t = Thread(Runnable {
...
result = "woohoo"
})
t.start()
t.join() // Main thread is waiting for the result to return it
return result
}
但是当一个挂起的函数切换线程时,它不会阻塞主(前一个)线程,因为它知道执行后从哪里继续。
launch(Dispatchers.Main) {
...
val result = getResult() // This will not block the main thread
use(result)
}

suspend fun getResult(): String = withContext(Dispatchers.IO) {
...
"woohoo"
}

关于async-await - 挂起函数如何不阻塞主线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61072844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com