Kotlin में एसिंक्रोनस प्रोग्रामिंग: व्यावहारिक रूप से पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Kotlin में एसिंक्रोनस प्रोग्रामिंग: व्यावहारिक रूप से पूर्ण गाइड

\n\n

आधुनिक अनुप्रयोगों को उच्च प्रदर्शन और उत्तरदायित्व की आवश्यकता होती है। Kotlin में कोरूटीन (coroutines) के साथ एसिंक्रोनस प्रोग्रामिंग नेटवर्क अनुरोधों, डेटाबेस और फ़ाइल संचालन के लिए डी-फैक्टो मानक बन गया है। इस गाइड में, हम मुख्य अवधारणाओं को समझेंगे, व्यावहारिक उदाहरण दिखाएंगे और आपके प्रोजेक्ट्स में उपयोग के लिए तैयार टेम्पलेट प्रदान करेंगे।

\n\n

1. Kotlin में कोरूटीन के मूल सिद्धांत

\n\n

कोरूटीन हल्के थ्रेड होते हैं जो मुख्य थ्रेड को ब्लॉक किए बिना फंक्शन के निष्पादन को रोकने की अनुमति देते हैं। पारंपरिक थ्रेड के विपरीत, कोरूटीन को किसी भी समय रोका जा सकता है और बाद में फिर से शुरू किया जा सकता है, जो उन्हें एसिंक्रोनस संचालन के लिए आदर्श बनाता है।

\n\n

1.1. डिपेंडेंसी जोड़ना

\n

शुरू करने के लिए, build.gradle.kts में डिपेंडेंसी जोड़ें:

\n\n
dependencies {\n    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")\n    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0") // Android के लिए\n}
\n\n

1.2. पहला कोरूटीन

\n

आइए runBlocking का उपयोग करके एक सरल कोरूटीन बनाएं - सिंक्रोनस और एसिंक्रोनस दुनिया के बीच एक पुल:

\n\n
import kotlinx.coroutines.*\n\nfun main() = runBlocking {\n    launch {\n        delay(1000L) // नॉन-ब्लॉकिंग विलंब\n        println("दुनिया!")\n    }\n    println("नमस्ते,")\n    delay(2000L) // कोरूटीन के पूरा होने की प्रतीक्षा करें\n}
\n\n

इस उदाहरण में, launch एक नया कोरूटीन शुरू करता है, और delay एक सस्पेंड फंक्शन है जो थ्रेड को ब्लॉक नहीं करता है।

\n\n

2. Suspend फंक्शन और संरचित समानता

\n\n

2.1. Suspend फंक्शन बनाना

\n

कोई भी फंक्शन जिसे रोका जा सकता है, उसे suspend मॉडिफायर से चिह्नित किया जाना चाहिए। ऐसे फंक्शन को केवल कोरूटीन या अन्य suspend फंक्शन से ही कॉल किया जा सकता है:

\n\n
suspend fun fetchUserData(userId: String): User {\n    delay(2000L) // नेटवर्क अनुरोध का अनुकरण\n    return User(userId, "इवान पेत्रोव")\n}\n\nsuspend fun fetchUserPosts(userId: String): List<Post> {\n    delay(1500L)\n    return listOf(Post("शीर्षक 1"), Post("शीर्षक 2"))\n}
\n\n

2.2. अनुक्रमिक निष्पादन

\n

डिफ़ॉल्ट रूप से, कोरूटीन एक ही launch के अंदर अनुक्रमिक रूप से निष्पादित होते हैं:

\n\n
fun main() = runBlocking {\n    val time = measureTimeMillis {\n        val user = fetchUserData("123")\n        val posts = fetchUserPosts("123")\n        println("${user.name} के ${posts.size} पोस्ट हैं")\n    }\n    println("निष्पादन समय: $time मि.से.") // ~3500 मि.से.\n}
\n\n

2.3. async/await के साथ समानांतर निष्पादन

\n

समानांतर निष्पादन के लिए async और await का उपयोग करें:

\n\n
fun main() = runBlocking {\n    val time = measureTimeMillis {\n        val user = async { fetchUserData("123") }\n        val posts = async { fetchUserPosts("123") }\n        \n        println("${user.await().name} के ${posts.await().size} पोस्ट हैं")\n    }\n    println("निष्पादन समय: $time मि.से.") // ~2000 मि.से. (समानांतर)\n}
\n\n

3. कोरूटीन डिस्पैचर और संदर्भ

\n\n

डिस्पैचर यह निर्धारित करते हैं कि कोरूटीन किस थ्रेड या थ्रेड पूल पर निष्पादित होगा। मुख्य डिस्पैचर:

\n\n
    \n
  • Dispatchers.Default — CPU-गहन कार्यों के लिए (डिफ़ॉल्ट)
  • \n
  • Dispatchers.IO — इनपुट/आउटपुट संचालन के लिए (नेटवर्क, फ़ाइलें)
  • \n
  • Dispatchers.Main — UI थ्रेड के लिए (Android, Swing)
  • \n
  • Dispatchers.Unconfined — किसी विशिष्ट थ्रेड से बंधा नहीं
  • \n
\n\n

3.1. Dispatchers.IO के साथ उदाहरण

\n
fun main() = runBlocking {\n    launch(Dispatchers.IO) {\n        // नेटवर्क अनुरोध\n        val response = httpClient.get("https://api.example.com/data")\n        withContext(Di                

ब्लॉग

पुस्तक अनुशंसाएँ