Чи надають супроводи Котліна які-небудь гарантії "раніше"?
Наприклад, чи існує гарантія "перед тим", що між записом mutableVar
і наступним читанням (потенційно) іншого потоку в цьому випадку гарантує :
suspend fun doSomething() {
var mutableVar = 0
withContext(Dispatchers.IO) {
mutableVar = 1
}
System.out.println("value: $mutableVar")
}
Редагувати:
Можливо, додатковий приклад уточнить питання краще, тому що це більше Котлін-іш (за винятком змінності). Чи безпечний цей код:
suspend fun doSomething() {
var data = withContext(Dispatchers.IO) {
Data(1)
}
System.out.println("value: ${data.data}")
}
private data class Data(var data: Int)
withContext
, тоді як перший приклад створює його спочатку, мутує всередині withContext
, а потім читає після withContext
. Таким чином, 1-й приклад виконує інші функції безпеки ниток.