为什么我应该将后台任务定义为暂停功能

时间:2019-02-25 17:09:30

标签: android kotlin kotlinx.coroutines

我在一个返回值的函数中有一个后台任务。我使用 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

2 个答案:

答案 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)

如果您尝试在其他任何地方使用该暂停功能,则会迫使您使用协程。这意味着在主线程上没有意外阻塞:) –