如何使用Kotlin异步并等待阶乘?

我在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" } 

我的问题是:有没有办法以异步的方式做这种计算? 如果是的话,怎么样?

使用协程的Anko支持(在本文中描述),您可以运行一个在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参考