Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin协程等待执行_Kotlin_Kotlin Coroutines - Fatal编程技术网

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()
方法的所有其他调用方在继续之前等待前一个方法的完成