暂停一项操作,直到另一项操作完成

时间:2020-08-13 05:35:10

标签: java android kotlin

我有两个函数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

1 个答案:

答案 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}}
相关问题