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中有一个编译处理程序?
如果异步执行某些计算,则无法直接返回该值,因为您还不知道计算是否已完成.您可以等待它完成,但这将使该功能再次同步.相反,您应该使用回调:
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你不需要分号.)
归档时间: |
|
查看次数: |
4742 次 |
最近记录: |