我有两个函数A和B,但是我对它们什么时间都没有控制。 现在,我希望B中的代码仅在A完成执行后才能运行,直到它应该等待为止。
要实现这一点:我使用协程,并使用以下命令在A中调用了完整代码:
private lateinit var waitUntilFinished : Deferred<Boolean?>
fun A(){
waitUntilFinished = lifecycleScope.async{ //todo}
}
fun B(){
lifecycleScope.launch {
waitUntilFinished.await()
}}
现在的问题是,由于B()在A()之后运行,因此我为“ waitUntilFinished.await()”获取了“ lateinit属性尚未初始化的错误”。现在我该如何运作?
问题与以下SO线程中所述的问题类似:android camera2 api - onImageAvailable is not invoked after session.capture
答案 0 :(得分:0)
如果在B()
之前调用A()
,则不会初始化lateinit属性,并引发错误。如果尚未初始化waitUntilFinished
,请在B()
中初始化A()
,然后调用 private lateinit var waitUntilFinished : Deferred<Boolean?>
fun A(){
waitUntilFinished = lifecycleScope.async{
return@async true
}
}
fun B(){
lifecycleScope.launch {
if(!::waitUntilFinished.isInitialized) {
waitUntilFinished = lifecycleScope.async {
A()
return@async false
}
}
waitUntilFinished.await()
}
}
。
类似这样的东西:
{{1}}