我通过单击按钮呼叫function
(未暂停)。我想使用function
协程在async
中运行循环并返回上一个计算值。
我的代码:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btnCount.setOnClickListener {
var result = GlobalScope.async { dummyFoo() }
runBlocking {
Toast.makeText(this@MainActivity, result.await().toString(), Toast.LENGTH_LONG).show()
}
}
}
private fun dummyFoo() : Int {
var result : Int = 0
val waitFor = CoroutineScope(Dispatchers.IO).async {
for (i in 1..20000) {
result++
}
return@async result
}
return result
}
输出:
我在Toast
中得到0。
我要在Toast
中20000。
如何使我的代码等待循环完成并导致结果变为20000
并输出?
不确定我是否知道此目的,但是如果这是您想要的,请将Dispatchers.IO
替换为Dispatchers.Unconfined
您应在dummyFoo()中使用await
private suspend fun dummyFoo() : Int {
var result : Int = 0
val waitFor = CoroutineScope(Dispatchers.IO).async {
for (i in 1..20000) {
result++
}
return@async result
}
waitFor.await()
return result
}