Android – Kotlin:异步乐趣中的返回值
我想问一下,如果函数做AsyncTask,是否有可能从函数中“返回”一个值?
例如 :
fun readData() : Int{ val num = 1; doAsync { for (item in 1..1000000){ num += 1; } } return num; }
这个函数的问题是AsyncTask还没有完成,所以我从函数中得到一个错误的值,任何想法如何解决它?
是使用一个接口是唯一的原因或有像Swift一样的编译处理程序?
如果您异步执行一些计算,则不能直接返回该值,因为您不知道计算是否已完成。 你可以等待它完成,但这将使该功能再次同步。 相反,你应该使用回调:
fun readData(callback: Int -> Unit) { val num = 1 doAsync { for (item in 1..1000000){ num += 1 } callback(num) } }
在致电地点:
readData { num -> [do something with num here] }
你也可以试试Kotlin协程 ,使异步代码看起来像普通的同步代码,但是对于初学者来说这可能有点复杂。 (顺便说一句,你不需要Kotlin的分号。)
不仅在kotlin
,在任何编程语言中都不可能 to return from a async method
。 但是你可以做的是:
- 使用像基督徒建议的
co-routines
。 - 使用
RxJava or RxKotlin
等Reactive方法处理数据流,即使您不能在不同的线程中返回您的方法,您也可以观察到不同线程的函数返回类型。 - 如果你做的事情非常简单,
Callbacks
可以是有帮助的。