Kotlin协程等待执行
我正在使用一些不能同时运行的库。这意味着Kotlin协程等待执行,kotlin,kotlin-coroutines,Kotlin,Kotlin Coroutines,我正在使用一些不能同时运行的库。这意味着 funcallmylib(cmd:String,listener:MyLibListener):长 在侦听器收到操作完成的通知之前,无法再次调用。否则将引发异常 我将此库用于协同程序: 对象MyLibRunner{ suspend fun runMyLib(cmd:String):结果{ 返回SuspendCancelableCoroutine{continuation-> val executionId=callMyLib(cmd,对象:MyLibL
funcallmylib(cmd:String,listener:MyLibListener):长
在侦听器
收到操作完成的通知之前,无法再次调用。否则将引发异常
我将此库用于协同程序:
对象MyLibRunner{
suspend fun runMyLib(cmd:String):结果{
返回SuspendCancelableCoroutine{continuation->
val executionId=callMyLib(cmd,对象:MyLibListener{
成功时覆盖乐趣(结果:结果){
继续。继续(结果)
}
重写错误(e:异常){
续.除例外情况外的简历(e)
}
})
continuation.invokeOnCancellation{cancelMyLib(executionId)}
}
}
}
我还有一个类负责为lib准备参数。我试图使该类的所有调用者形成一个队列,在队列中等待前一个作业的完成
对象MyLibEditor{
private val parentJob=SupervisorJob()
暂停有趣的内容(…某些参数…):结果{
val id=Random.nextInt()
Log.d(标记“#操作$id:join()”)
val作业=作业(父作业)
parentJob.children.forEach{if(it!=job)it.join()}
...
//准备命令行
...
val cmd=。。。
Log.d(标记“#操作$id:runMyLib()”)
val result=withContext(作业){MyLibRunner.runMyLib(cmd)}
作业完成()
Log.d(标记“#操作$id:Done.”
返回结果
}
}
但这种方法似乎不起作用。在日志中,我看到:
#operation 1: join()
#operation 2: join()
#operation 3: join()
#operation 1: runMyLib()
#operation 1: Done.
第一次手术似乎没有等待,因为没有什么可等待的。但所有其他行动都在无限期等待
我做错了什么?如何使doSomething()
方法的所有其他调用方在继续之前等待前一个方法的完成