corotines Kotlin ให้การรับประกัน "ที่เกิดขึ้นก่อนหน้า" หรือไม่?
ตัวอย่างเช่นมีการรับประกัน "ที่เกิดขึ้นก่อน" ระหว่างการเขียนถึงmutableVar
และการอ่านในภายหลัง (อาจ) เธรดอื่น ๆ ในกรณีนี้:
suspend fun doSomething() {
var mutableVar = 0
withContext(Dispatchers.IO) {
mutableVar = 1
}
System.out.println("value: $mutableVar")
}
แก้ไข:
บางทีตัวอย่างเพิ่มเติมอาจทำให้คำถามชัดเจนขึ้นเพราะมันมากขึ้น Kotlin-ish (ยกเว้นความไม่แน่นอน) โค้ดนี้ปลอดภัยสำหรับเธรดหรือไม่:
suspend fun doSomething() {
var data = withContext(Dispatchers.IO) {
Data(1)
}
System.out.println("value: ${data.data}")
}
private data class Data(var data: Int)
withContext
ขณะที่ตัวอย่างที่ 1 สร้างมันขึ้นมาก่อนกลายพันธุ์ภายในwithContext
แล้วอ่านหลังจากwithContext
นั้น ดังนั้นตัวอย่างที่ 1 จะใช้คุณสมบัติด้านความปลอดภัยของเธรดมากขึ้น