As corotinas da Kotlin fornecem alguma garantia "acontece antes"?
Por exemplo, existe uma garantia "acontece antes" entre a gravação mutableVar
e a leitura subsequente (potencialmente) em outro encadeamento neste caso:
suspend fun doSomething() {
var mutableVar = 0
withContext(Dispatchers.IO) {
mutableVar = 1
}
System.out.println("value: $mutableVar")
}
Editar:
Talvez um exemplo adicional esclareça melhor a questão, pois é mais Kotlin-ish (exceto pela mutabilidade). Esse código é seguro para threads:
suspend fun doSomething() {
var data = withContext(Dispatchers.IO) {
Data(1)
}
System.out.println("value: ${data.data}")
}
private data class Data(var data: Int)
withContext
, enquanto o primeiro exemplo o cria primeiro, muda dentro withContext
e depois lê withContext
. Portanto, o 1º exemplo exercita mais recursos de segurança de threads.