Я пытаюсь убедиться, что эти два метода синхронизированы. Я заметил, что сопрограммы сложнее синхронизировать, чем потоки. Как я могу гарантировать, что если я позвоню 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()
, но фактически сначала выполняется stop. Так что мой код продолжается, когда он должен был остановиться.