Le coroutine di Kotlin forniscono garanzie "prima"?
Ad esempio, esiste una garanzia "accade prima" tra la scrittura mutableVar
e la successiva lettura su (potenzialmente) altro thread in questo caso:
suspend fun doSomething() {
var mutableVar = 0
withContext(Dispatchers.IO) {
mutableVar = 1
}
System.out.println("value: $mutableVar")
}
Modificare:
Forse un ulteriore esempio chiarirà meglio la domanda perché è più kotlin-ish (tranne che per la mutabilità). Questo codice è thread-safe:
suspend fun doSomething() {
var data = withContext(Dispatchers.IO) {
Data(1)
}
System.out.println("value: ${data.data}")
}
private data class Data(var data: Int)
withContext
, mentre il primo esempio lo crea per primo, muta all'interno withContext
e poi legge dopo withContext
. Quindi il primo esempio esercita più funzioni di sicurezza del thread.