我希望您能在调用这3个函数时详细说明区别:
lifecycleScope.launch(Dispatchers.IO) {
var res = addTwoNumbers1(2,3)
}
lifecycleScope.launch {
withContext(Dispatchers.IO) {
var res = addTwoNumbers1(2, 3)
}
}
lifecycleScope.launch {
var res = addTwoNumbers2(2,3)
}
功能:
suspend fun addTwoNumbers1(num1: Int, num2: Int): Int = suspendCoroutine { cont ->
val res = num1+num2
cont.resume(res)
}
suspend fun addTwoNumbers2(num1: Int, num2: Int) = withContext(Dispatchers.IO) {
val res = num1+num2
return@withContext res
}
1条答案
按热度按时间yzckvree1#
第一个版本使用
Dispatcher.IO
,这意味着内部的任何代码都将在后台线程上执行,除非您更改它第二个版本使用
Dispatchers.Main.immediate
(ui线程,这对于lifecycleScope
)第三个开始一个新的合作项目
UI
线程,然后调用一个挂起函数(实际上并不挂起),该函数将更改Dispatcher
对io至于你的暂停功能,
addTwoNumbers1
是唯一能够挂起的,因为它调用suspendcoroutine。addTwoNumbers2
不是真正的挂起函数