Kotlin 如何在挂起的函数调用方返回后启动一个持续运行的协同程序?
例如,从一个挂起函数,我们如何启动一个协同路由来触发并忘记一个http请求?也就是说,启动协同路由的挂起函数可以在http请求可能正在进行时返回。(例如,触发一个副作用http请求以捕获分析/指标)。如果您只想启动并忘记协同路由,您甚至不需要挂起功能。您只需使用Kotlin 如何在挂起的函数调用方返回后启动一个持续运行的协同程序?,kotlin,kotlin-coroutines,Kotlin,Kotlin Coroutines,例如,从一个挂起函数,我们如何启动一个协同路由来触发并忘记一个http请求?也就是说,启动协同路由的挂起函数可以在http请求可能正在进行时返回。(例如,触发一个副作用http请求以捕获分析/指标)。如果您只想启动并忘记协同路由,您甚至不需要挂起功能。您只需使用GlobalScope fun test() { GlobalScope.launch { while (true) { delay(1000) println("I
GlobalScope
fun test() {
GlobalScope.launch {
while (true) {
delay(1000)
println("I'm alive")
}
}
}
选中此项:
fun abc(){
GlobalScope.launch(Dispatchers.IO) {
try {
while (true) {
delay(10000)
}
} catch (e: Exception) {
Timber.e(e)
}
}
一旦进入协同程序,就应该将挂起的函数返回类型保存在变量中,仅此而已 例如,如果您这样做:
coroutineScope.launch{
thisIsASuspendingMethod()
thisIsAlsoASuspendingMethod()
}
没有人能向您保证第一个方法将首先结束它的执行,因为suspend
方法就是这样做的,它运行缓慢的代码
但是,如果您使用:
coroutineScope.launch{
val retreiveData = thisIsASuspendingMethod()
if(retreiveData.isSucessful()){
thisIsAlsoASuspendingMethod()
}
}
此外,我建议您阅读更多关于协同程序的内容,正是因为您这样说:
例如,从一个挂起函数,我们如何启动一个协同程序
触发并忘记http请求
启动协同程序是为了运行suspend
方法,而不是其他方法。
由于协同程序只是运行慢速代码,所以您可能需要考虑挂起方法内的挂起方法。 避免使用
GlobalScope
please为什么?这似乎是好的火和忘记的东西,当我启动一个火和忘记工作,我不想跟踪它的完成情况。或者你是说别的什么?