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

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

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

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

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

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

इस लेख में, हम समझेंगे कि Kotlin में एसिंक्रोनस प्रोग्रामिंग कैसे काम करती है, मूल बातों से लेकर उन्नत तकनीकों तक। आप सीखेंगे कि कोरूटीन का प्रभावी ढंग से उपयोग कैसे करें, ब्लॉकिंग से कैसे बचें और स्केलेबल एप्लिकेशन कैसे लिखें।



1. Kotlin में कोरूटीन की मूल बातें

कोरूटीन Kotlin में एसिंक्रोनस प्रोग्रामिंग की मुख्य अवधारणा है। वे थ्रेड को ब्लॉक किए बिना फ़ंक्शन के निष्पादन को रोकने की अनुमति देते हैं। कोरूटीन के साथ काम करने के लिए kotlinx.coroutines लाइब्रेरी का उपयोग किया जाता है। यहाँ एक न्यूनतम उदाहरण है:

import kotlinx.coroutines.*

fun main() = runBlocking { launch { delay(1000L) // नॉन-ब्लॉकिंग विलंब println("दुनिया!") } println("नमस्ते,")}

इस कोड में, runBlocking कोरूटीन के लिए एक ब्लॉकिंग संदर्भ बनाता है (आमतौर पर केवल main या परीक्षणों में उपयोग किया जाता है), और launch एक नया कोरूटीन शुरू करता है। delay फ़ंक्शन एक suspend-फ़ंक्शन है जो थ्रेड को ब्लॉक किए बिना कोरूटीन को रोकता है।

मुख्य अवधारणाएँ:

  • CoroutineScope — कोरूटीन की दृश्यता का क्षेत्र, उनके जीवनचक्र का प्रबंधन करता है।
  • CoroutineContext — सेटिंग्स का सेट (डिस्पैचर, अपवाद हैंडलर)।
  • Suspend-फ़ंक्शन — एक फ़ंक्शन जिसे रोका और बाद में फिर से शुरू किया जा सकता है।


2. Suspend-फ़ंक्शन और डिस्पैचर

Suspend-फ़ंक्शन एसिंक्रोनस कोड का आधार हैं। वे अन्य suspend-फ़ंक्शन (delay, withContext) को कॉल कर सकते हैं और अपने निष्पादन को रोक सकते हैं। उदाहरण:

suspend fun fetchUserData(): String {    delay(2000L) // नेटवर्क अनुरोध का अनुकरण    return "उपयोगकर्ता डेटा"}

fun main() = runBlocking { val data = async { fetchUserData() } println("लोड हो रहा है...") println(data.await()) // परिणाम की प्रतीक्षा करें}

डिस्पैचर (Dispatchers) यह निर्धारित करते हैं कि कोरूटीन किस थ्रेड पर निष्पादित होगा:

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

डिस्पैचर स्विच करने का उदाहरण:

suspend fun loadData(): String = withContext(Dispatchers.IO) {    // बैकग्राउंड थ्रेड में भारी ऑपरेशन करें    Thread.sleep(1000L) // ब्लॉकिंग ऑपरेशन का अनुकरण    "परिणाम"}

प्रदर्शन के लिए सही डिस्पैचर का उपयोग करना महत्वपूर्ण है। लंबी प्रक्रियाओं के लिए Dispatchers.Main का उपयोग न करें - यह UI को ब्लॉक कर देगा।



3. async/await और चैनलों के साथ काम करना

एक साथ कई कार्यों को निष्पादित करने के लिए async और await का उपयोग करें। async एक Deferred ऑब्जेक्ट लौटाता है जिसकी प्रतीक्षा की जा सकती है:

fun main() = runBlocking {    val result1 = async(Dispatchers.IO) { fetchFromApi("url1") }    val result2 = async(Dispatchers.IO) { fetchFromApi("url2") }    println("परिणाम 1: ${result1.await()}")    println("परिणाम 2: ${result2.await()}")}

suspend fun fetchFromApi(url: String): String { delay(1000L) return "$url से उत्तर

ब्लॉग

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