如何解决协程完成后如何返回布尔值?
我在一个嵌套方法内部有一个布尔方法,我想在所有方法完成后返回该布尔值,但它首先执行该布尔值并返回。 它打印-> Entered,完成并开始,结束。
fun syncAll(): Boolean {
Log.d(TAG,"syncAll: Entered")
val job= Coroutines.io {
Log.d(TAG,"syncAll: started")
method1()
method2()
method3()
Log.d(TAG,"syncAll: end")
}
Log.d(TAG,"syncAll: completed")
return job.isCompleted
}
解决方法
您需要启用syncAll()
suspend
函数并从位于呼叫站点的CoroutineScope
进行调用。
在syncAll()
内部,您可以使用withContext()
等待在不同协程上运行的不同方法的结果。
syncAll
应该是一个暂停函数:
suspend fun syncAll(): Boolean {
println("sync: started")
val job = Job()
CoroutineScope(Dispatchers.IO + job).launch {
delayFunction(1000)
delayFunction(2000)
delayFunction(3000)
println("sync: end")
}.join() //Suspends the coroutine until this job is complete
println("sync: completed")
return job.complete()
}
suspend fun delayFunction(d: Long) {
delay(d)
}
您必须在协程内部调用此函数:
val job = Job()
CoroutineScope(Dispatchers.Main + job).launch {
val result = syncAll()
println("sync: finished: $result")
}
结果:
sync: started
sync: end //after 6 seconds
sync: completed
sync: finished: true
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。