我在一个返回值的函数中有一个后台任务。我使用 Kotlin协程。
我可以这样:
fun backTask(): Int {
// Might take a few seconds
return 10
}
GlobalScope.launch(Dispatcher.Main){
val num = withContext(Dispatcher.IO) { backTask() }
toast("Number: $num")
}
因此有效。是什么让我定义了后台任务功能suspend function
答案 0 :(得分:1)
如果从那里调用另一个import numpy as np
Nx = 100
Ny = 100
A = np.random.normal(0, scale=2,size=(Nx, Ny))
A[np.where((A**2) < 1)] += np.random.normal(0) * (1 - A[np.where((A**2) < 1)]**2)
函数,则应该使用suspend
修饰符定义函数。例如,考虑以下情况:
suspend
在这里,我们调用suspend fun backTask(): Int = withContext(Dispatchers.IO) {
// Might take a few seconds, runs in background thread.
10
}
并将suspend fun withContext()
修饰符添加到suspend
函数中。如果不这样做,编译器将给出错误仅应从协程或其他暂停函数调用暂停函数backTask
。在这种情况下,使用协程我们可以调用withContext
函数而不会阻塞主线程:
backTask
注意:GlobalScope.launch(Dispatcher.Main) {
val num = backTask() // not blocking the Main Thread
toast("Number: $num")
}
is not recommended to use。
答案 1 :(得分:0)
如果您尝试在其他任何地方使用该暂停功能,则会迫使您使用协程。这意味着在主线程上没有意外阻塞:) –