我想确保这两种方法是同步的。我注意到协程比线程更难同步。我该如何保证如果我调用start()
然后调用stop()
,我的代码最终会被停止?
object Test {
private val coroutine = CoroutineScope(Dispatchers.IO)
@Synchronized
fun start() {
coroutine.launch {
// some work
}
}
@Synchronized
fun stop() {
coroutine.launch {
// clean up then stop
}
}
}
我担心的是,我调用了start()
,然后实际上先执行了stop()
。因此,当我的代码应该停止时,它还在继续执行。
ExecutorService.submit(task)
的语义吗?将一些工作单元排队并异步执行,但按提交顺序执行?如果是的话,那么你应该使用一个actor
。 - Marko Topolnik