Avatar ·

ما الفرق بين 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()}") } ```