如何使用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参考