Kotlin में एसिंक्रोनस प्रोग्रामिंग: शुरुआती लोगों के लिए पूर्ण गाइड
\n\nआधुनिक एप्लिकेशन तेजी से एक साथ कई कार्य करने की मांग करते हैं: नेटवर्क से डेटा लोड करना, डेटाबेस के साथ काम करना, उपयोगकर्ता इनपुट प्रोसेस करना। Kotlin भाषा में इसके लिए कोरूटीन (coroutines) पर आधारित एसिंक्रोनस प्रोग्रामिंग का उपयोग किया जाता है। यह एक शक्तिशाली और सुरुचिपूर्ण उपकरण है जो जटिल कॉलबैक के बिना नॉन-ब्लॉकिंग कोड लिखने की अनुमति देता है।
\n\nइस लेख में हम Kotlin में एसिंक्रोनस प्रोग्रामिंग की मूल बातें समझेंगे: कोरूटीन क्या हैं, launch, async और await का उपयोग कैसे करें, साथ ही डिस्पैचर और त्रुटि प्रबंधन से परिचित होंगे। यह सामग्री शुरुआती डेवलपर्स के लिए है जो Kotlin सिंटैक्स की मूल बातों से पहले से परिचित हैं।
कोरूटीन क्या हैं और इनकी आवश्यकता क्यों है?
\n\nकोरूटीन निष्पादन का एक हल्का-फुल्का थ्रेड है जिसे मुख्य थ्रेड को ब्लॉक किए बिना रोका और फिर से शुरू किया जा सकता है। पारंपरिक थ्रेड के विपरीत, कोरूटीन सिस्टम संसाधनों से बंधे नहीं होते हैं और एक ही थ्रेड में निष्पादित हो सकते हैं, आपस में स्विच करते हुए।
\n\nकोरूटीन के मुख्य लाभ:
\n- \n
- हल्कापन — महत्वपूर्ण मेमोरी खपत के बिना हजारों कोरूटीन चलाए जा सकते हैं। \n
- रोकना (suspend) — एक फ़ंक्शन थ्रेड को ब्लॉक किए बिना अपने निष्पादन को "फ्रीज़" कर सकता है। \n
- संरचित समवर्तीता — कोरूटीन स्वचालित रूप से अपने जीवनचक्र का प्रबंधन करते हैं। \n
- सरलता — कोड सिंक्रोनस जैसा दिखता है, बिना नेस्टेड कॉलबैक के। \n
कोरूटीन के साथ काम करने के लिए build.gradle.kts में निर्भरता जोड़ना आवश्यक है:
dependencies {\n implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")\n}\n\nमुख्य बिल्डिंग ब्लॉक: launch, async और suspend
\n\nsuspend फ़ंक्शन
\n\nकोई भी फ़ंक्शन जो कोरूटीन के निष्पादन को रोक सकता है, उसे suspend कीवर्ड से चिह्नित किया जाता है। ऐसे फ़ंक्शन को केवल कोरूटीन या किसी अन्य suspend फ़ंक्शन के अंदर ही कॉल किया जा सकता है।
suspend fun fetchUserData(): String {\n delay(1000) // विलंब का अनुकरण\n return "User data loaded"\n}\n\nफ़ंक्शन delay() — यह Thread.sleep() का एनालॉग है, लेकिन थ्रेड को ब्लॉक किए बिना।
launch — बिना परिणाम के कोरूटीन शुरू करना
\n\nबिल्डर launch एक नया कोरूटीन शुरू करता है जो परिणाम नहीं लौटाता (यह Job लौटाता है)। इसका उपयोग "शुरू करो और भूल जाओ" प्रकार के कार्यों के लिए किया जाता है।
import kotlinx.coroutines.*\n\nfun main() = runBlocking {\n launch {\n println("कोरूटीन 1 शुरू हुआ")\n delay(1000)\n println("कोरूटीन 1 समाप्त हुआ")\n }\n println("मुख्य थ्रेड काम करता रहता है")\n}\n\nआउटपुट:
\nमुख्य थ्रेड काम करता रहता है\nकोरूटीन 1 शुरू हुआ\nकोरूटीन 1 समाप्त हुआ\n\nध्यान दें: runBlocking का उपयोग केवल शैक्षिक उदाहरणों या एंट्री पॉइंट (जैसे main()) में किया जाता है। वास्तविक एप्लिकेशन (Android, सर्वर) में इसका उपयोग करने की आवश्यकता नहीं है।
async और await — परिणाम प्राप्त करना
\n\nयदि कोरूटीन को परिणाम लौटाना है, तो बिल्डर async का उपयोग किया जाता है। यह Deferred<T> ऑब्जेक्ट लौटाता है, जिससे await() का उपयोग करके मान प्राप्त किया जा सकता है।
fun main() = runBlocking {\n val deferredResult: Deferred<String> = async {\n delay(1500)\n "गणना का परिणाम"\n }\n\n println("परिणाम की प्रतीक्षा कर रहे हैं...")\n val result = deferredResult.await()\n println("परिणाम प्राप्त हुआ: $result")\n}\n\nआउटपुट:
\nपरिणाम की प्रतीक्षा कर रहे हैं...\nपरिणाम प्राप्त हुआ: गणना का परिणाम\n\nasync की मदद से कई समानांतर कार्य चलाए जा सकते हैं:
ब्लॉग
पुस्तक अनुशंसाएँ
यह भी पढ़ें