Bieten Kotlin-Coroutinen Garantien für "Vorheriges"?
mutableVar
Gibt es in diesem Fall beispielsweise eine "Vorher-passiert" -Garantie zwischen dem Schreiben in und dem anschließenden Lesen eines (möglicherweise) anderen Threads:
suspend fun doSomething() {
var mutableVar = 0
withContext(Dispatchers.IO) {
mutableVar = 1
}
System.out.println("value: $mutableVar")
}
Bearbeiten:
Vielleicht klärt ein zusätzliches Beispiel die Frage besser, weil es mehr Kotlin-artig ist (mit Ausnahme der Veränderlichkeit). Ist dieser Code threadsicher:
suspend fun doSomething() {
var data = withContext(Dispatchers.IO) {
Data(1)
}
System.out.println("value: ${data.data}")
}
private data class Data(var data: Int)
withContext
, während das erste Beispiel es zuerst erstellt, darin mutiert withContext
und danach liest withContext
. Im ersten Beispiel werden also mehr Thread-Sicherheitsfunktionen ausgeführt.