小编Shk*_*kum的帖子

如何等待协程结束

我在下面有一些代码。延迟(3000)只是长循环(或循环)的替代。我期待循环完成后println(res)会打印“Some String”然后启用button。但在现实生活中会println(res)打印一个空字符串并button在我单击它时同时启用。我的问题是:如何等待协程结束,并且只有在协程运行println(res)button.isEnabled = true.

private var res: String = ""

private suspend fun test(): String {
    delay(3000) // delay - just replacement for long loop
    return "Some String" // String received after loop
}

fun onClick(view: View) {
    res = ""
    button.isEnabled = false
    GlobalScope.launch {
        res = withContext(Dispatchers.Default) {
            test()
        }
    }
    println(res) // 1. trying to get string received after loop, but not working
    button.isEnabled = …
Run Code Online (Sandbox Code Playgroud)

android coroutine kotlin kotlin-coroutines

10
推荐指数
2
解决办法
2万
查看次数

标签 统计

android ×1

coroutine ×1

kotlin ×1

kotlin-coroutines ×1