ما الفرق بين launch/join و async/await في كوروتينات Kotlin؟
مرحباً بالجميع! بدأت في تعلم الكوروتينات في Kotlin وأصبحت مرتبكاً بين طريقتين: launch/join و async/await. يبدو أن كلاهما يسمح بتشغيل المهام بالتوازي وانتظار اكتمالها، لكنني لا أفهم متى أستخدم أياً منهما.
لدي مثال بسيط: أحتاج إلى تنزيل ملفين ودمجهما. جربت كلا الطريقتين لكن النتائج كانت مختلفة.
الطريقة الأولى باستخدام launch/join:
```kotlin
fun main() = runBlocking {
var result1 = ""
var result2 = ""
val job1 = launch {
delay(1000)
result1 = "محتوى الملف 1"
}
val job2 = launch {
delay(1000)
result2 = "محتوى الملف 2"
}
job1.join()
job2.join()
println("$result1 $result2")
}
```
الطريقة الثانية باستخدام async/await:
```kotlin
fun main() = runBlocking {
val deferred1 = async {
delay(1000)
"محتوى الملف 1"
}
val deferred2 = async {
delay(1000)
"محتوى الملف 2"
}
println("${deferred1.await()} ${deferred2.await()}")
}
```