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 。 但是你可以做的是:

  1. 使用像基督徒建议的co-routines
  2. 使用RxJava or RxKotlin等Reactive方法处理数据流,即使您不能在不同的线程中返回您的方法,您也可以观察到不同线程的函数返回类型。
  3. 如果你做的事情非常简单, Callbacks可以是有帮助的。