Các coroutines Kotlin có cung cấp bất kỳ đảm bảo "xảy ra trước" không?
Ví dụ, có đảm bảo "xảy ra trước" giữa ghi mutableVar
và đọc tiếp theo (có khả năng) luồng khác trong trường hợp này:
suspend fun doSomething() {
var mutableVar = 0
withContext(Dispatchers.IO) {
mutableVar = 1
}
System.out.println("value: $mutableVar")
}
Biên tập:
Có thể ví dụ bổ sung sẽ làm rõ câu hỏi tốt hơn vì nó nhiều hơn Kotlin-ish (ngoại trừ khả năng biến đổi). Mã này có an toàn không:
suspend fun doSomething() {
var data = withContext(Dispatchers.IO) {
Data(1)
}
System.out.println("value: ${data.data}")
}
private data class Data(var data: Int)
withContext
, trong khi ví dụ thứ nhất tạo ra nó trước, biến đổi bên trong withContext
và sau đó đọc sau withContext
. Vì vậy, ví dụ đầu tiên thực hiện nhiều tính năng an toàn chủ đề.