我在Kotlin(Android应用程序)中有这个功能:
tailrec fun factorial(n: BigInteger, remainder: BigInteger = BigInteger.ONE) : BigInteger{
if(n== BigInteger.ZERO)
return remainder
else {
return factorial(n - BigInteger.ONE, remainder * n)
}
}
这个简单的代码:
button.setOnClickListener {
val n = editTextT.text.toString()
val result: BigInteger = factorial(BigInteger(n))
textView.text = "$n! is $result"
}
我的问题是:有没有办法以异步方式进行这种计算?如果是,怎么样?
答案 0 :(得分:1)
由于Anko支持协程(在this article中描述),你可以运行一个协程来执行UI线程中的代码但运行并等待后台操作,在你的情况下它看起来像:
button.setOnClickListener {
val n = editTextT.text.toString()
async(UI) {
val result: Deferred<BigInteger> = bg { factorial(BigInteger(n)) }
textView.text = "$n! is ${result.await()}"
}
}
另请参阅:Anko reference