Avatar ·

ماذا تعني دالة suspend في Kotlin coroutines؟ شرح للمبتدئين

مرحبًا بالجميع! بدأت تعلم coroutines في Kotlin ولا أستطيع فهم ما هي دالة suspend. في التوثيق مكتوب أنها "دالة قابلة للإيقاف المؤقت"، لكن هذا لا يوضح لي شيئًا. حاولت كتابة كود بسيط لكنه لا يُترجم: ```kotlin fun main() { fetchUserData() // خطأ: يجب استدعاء دالة suspend 'fetchUserData' فقط من coroutine أو دالة suspend أخرى } suspend fun fetchUserData(): String { delay(1000) // محاكاة عملية طويلة return "User data" } ``` لماذا لا يمكنني ببساطة استدعاء هذه الدالة من main؟ ما هو "suspend" في الحقيقة؟ كيف يعمل تحت الغطاء؟ قرأت عن async/await في لغات أخرى، لكن الأمر يبدو مختلفًا هنا. اشرح لي، من فضلك، بكلمات بسيطة مع أمثلة، ما هي دالة suspend ولماذا نحتاجها. يهمني بشكل خاص: 1. ماذا يحدث للـ thread عند استدعاء دالة suspend؟ 2. كيف تختلف عن الدالة العادية؟ 3. لماذا لا يمكن استدعاؤها من دالة عادية؟