Android - Kotlin:在异步乐趣中返回值

ome*_*mir 9 multithreading android android-asynctask kotlin

我想问一下,如果函数执行AsyncTask,是否可以从函数中"返回"一个值?

例如 :

fun readData() : Int{
    val num = 1;
    doAsync { 
    for (item in 1..1000000){
        num += 1;
    }
    }
    return num;
}
Run Code Online (Sandbox Code Playgroud)

这个函数的问题是AsyncTask还没有完成,所以我从函数中得到一个错误的值,任何想法如何解决它?

使用接口是唯一的原因还是像Swift中有一个编译处理程序?

Chr*_*ann 9

如果异步执行某些计算,则无法直接返回该值,因为您还不知道计算是否已完成.您可以等待它完成,但这将使该功能再次同步.相反,您应该使用回调:

fun readData(callback: (Int) -> Unit) {
    val num = 1
    doAsync { 
        for (item in 1..1000000){
            num += 1
        }
        callback(num)
    }
}
Run Code Online (Sandbox Code Playgroud)

在呼叫现场:

readData { num -> [do something with num here] }
Run Code Online (Sandbox Code Playgroud)

您还可以尝试使用Kotlin协同程序,这使得异步代码看起来像常规同步代码,但对于初学者来说这些可能有点复杂.(顺便说一句,在Kotlin你不需要分号.)