Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 如何在挂起的函数调用方返回后启动一个持续运行的协同程序?_Kotlin_Kotlin Coroutines - Fatal编程技术网

Kotlin 如何在挂起的函数调用方返回后启动一个持续运行的协同程序?

Kotlin 如何在挂起的函数调用方返回后启动一个持续运行的协同程序?,kotlin,kotlin-coroutines,Kotlin,Kotlin Coroutines,例如,从一个挂起函数,我们如何启动一个协同路由来触发并忘记一个http请求?也就是说,启动协同路由的挂起函数可以在http请求可能正在进行时返回。(例如,触发一个副作用http请求以捕获分析/指标)。如果您只想启动并忘记协同路由,您甚至不需要挂起功能。您只需使用GlobalScope fun test() { GlobalScope.launch { while (true) { delay(1000) println("I

例如,从一个挂起函数,我们如何启动一个协同路由来触发并忘记一个http请求?也就是说,启动协同路由的挂起函数可以在http请求可能正在进行时返回。(例如,触发一个副作用http请求以捕获分析/指标)。

如果您只想启动并忘记协同路由,您甚至不需要挂起功能。您只需使用
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为什么?这似乎是好的火和忘记的东西,当我启动一个火和忘记工作,我不想跟踪它的完成情况。或者你是说别的什么?