launch — सार, fire-and-forget कोरूटीन लॉन्च और यह कैसे काम करता है

लेखक: IT Sectr प्रकाशित: 2026-06-22 पढ़ने का समय: 7 मिनट

launch — Kotlin में एक Coroutine Builder जो बिना परिणाम लौटाए कोरूटीन शुरू करता है, निष्पादन को नियंत्रित करने के लिए Job ऑब्जेक्ट लौटाता है। यह बिल्डर fire-and-forget पैटर्न लागू करता है: कोरूटीन बैकग्राउंड थ्रेड में काम शुरू करता है और स्वचालित रूप से पूरा होता है। JetBrains दस्तावेज़ीकरण, 2024 के अनुसार, launch Kotlin Coroutines में समानांतर कार्यों को चलाने का प्राथमिक तरीका है।

मुख्य बातें

  • launch — बिना परिणाम लौटाए कोरूटीन शुरू करने के लिए बिल्डर (fire-and-forget)
  • Job — cancel(), join(), isActive विधियों वाला कोरूटीन नियंत्रण ऑब्जेक्ट
  • launch चाइल्ड कोरूटीन के स्वचालित रद्दीकरण के लिए CoroutineScope के साथ एकीकृत होता है
  • CoroutineStart.LAZY स्पष्ट start() या join() कॉल तक निष्पादन को स्थगित करने की अनुमति देता है
  • launch Android में डेटाबेस सहेजने, नेटवर्क कॉल और UI अपडेट के लिए उपयोग होता है

Kotlin Coroutines में launch क्या है?

launch एक Kotlin एक्सटेंशन फ़ंक्शन है, जो kotlinx.coroutines आयात के माध्यम से उपलब्ध है, जो दिए गए CoroutineScope में एक नया कोरूटीन बनाता है। सामान्य फ़ंक्शनों के विपरीत, launch के अंदर का कोड समवर्ती रूप से निष्पादित होता है — कोरूटीन बिना थ्रेड को ब्लॉक किए रुक (suspend) सकता है और बाद में फिर से शुरू हो सकता है।

launch बिल्डर Kotlin कोरूटीन मॉडल का मूलभूत निर्माण खंड है। यह गणना किया गया मान नहीं लौटाता बल्कि एक Job ऑब्जेक्ट लौटाता है जो कोरूटीन निष्पादन को नियंत्रित करने की अनुमति देता है। किसी अन्य कोरूटीन के अंदर launch के माध्यम से शुरू किए गए सभी चाइल्ड कोरूटीन पैरेंट से बंधे होते हैं।

launch का सिंटैक्स और पैरामीटर

launch बिल्डर को कई पैरामीटरों के साथ एक inline फ़ंक्शन के रूप में परिभाषित किया गया है: CoroutineScope, CoroutineContext, CoroutineStart और एक suspend ब्लॉक। पैरामीटरों के डिफ़ॉल्ट मान हैं, जो launch को सामान्य परिदृश्यों के लिए सुविधाजनक बनाते हैं।

kotlin
public fun CoroutineScope.launch(
    context: CoroutineContext = EmptyCoroutineContext,
    start: CoroutineStart = CoroutineStart.DEFAULT,
    block: suspend CoroutineScope.() -> Unit
): Job

context पैरामीटर एक CoroutineContext स्वीकार करता है जो डिस्पैचर, अपवाद हैंडलर और नामित तत्व को जोड़ता है। अक्सर Dispatchers.IO, Dispatchers.Main या SupervisorJob त्रुटि पृथक्करण के लिए पारित किया जाता है।

Job और जीवनचक्र प्रबंधन

Job — लौटाया गया ऑब्जेक्ट जो कोरूटीन के जीवनचक्र का प्रतिनिधित्व करता है। Job अवस्थाओं में हो सकता है: New, Active, Completing, Completed, Cancelling, Cancelled। प्रत्येक अवस्था निष्पादन स्थिति को दर्शाती है और परिवर्तनों पर प्रतिक्रिया करने की अनुमति देती है।

kotlin
val job = CoroutineScope(Dispatchers.IO).launch {
    repeat(10) { i ->
        delay(1000L)
        println("प्रगति: $i")
    }
}

println("जॉब सक्रिय है: ${job.isActive}")
delay(2500L)
job.cancel()
println("जॉब रद्द है: ${job.isCancelled}")

Job एक पदानुक्रम का समर्थन करता है: यदि पैरेंट कोरूटीन रद्द किया जाता है, तो सभी चाइल्ड स्वचालित रूप से रद्द हो जाते हैं। SupervisorJob इस व्यवहार को बदलता है — चाइल्ड कोरूटीन किसी एक के विफल होने पर रद्द नहीं होते।

launch में संरचित सहसमवर्तीता

संरचित सहसमवर्तीता का अर्थ है कि प्रत्येक कोरूटीन एक विशिष्ट CoroutineScope के अंदर शुरू किया जाता है, और जब तक सभी चाइल्ड कोरूटीन अपना काम पूरा नहीं कर लेते, scope पूरा नहीं होता। launch इस सिद्धांत का पूरी तरह से समर्थन करता है — किसी अन्य कोरूटीन के अंदर शुरू किए गए कोरूटीन उसके चाइल्ड होते हैं।

नेस्टेड launch कॉल

नेस्टेड launch कॉल के साथ, कोरूटीन का एक पेड़ बनता है। पैरेंट कोरूटीन सभी चाइल्ड के पूरा होने की प्रतीक्षा करता है, जिससे पूर्वानुमानित निष्पादन क्रम सुनिश्चित होता है और संसाधन प्रबंधन सरल होता है।

kotlin
fun main() = runBlocking {
    launch {
        launch {
            delay(1000L)
            println("चाइल्ड 1 पूर्ण")
        }
        launch {
            delay(500L)
            println("चाइल्ड 2 पूर्ण")
        }
        println("सभी चाइल्ड इस पंक्ति से पहले पूर्ण होते हैं")
    }
}

यह व्यवहार थ्रेड-आधारित सहसमवर्तीता से भिन्न है, जहाँ चाइल्ड थ्रेड पैरेंट से बंधे नहीं होते। कोरूटीन में, पैरेंट तब तक पूरा नहीं होता जब तक सभी चाइल्ड अपना काम पूरा नहीं कर लेते।

launch में अपवाद प्रबंधन

launch में अपवाद प्रबंधन Job के प्रकार पर निर्भर करता है। सामान्य Job के लिए, अपवाद पैरेंट कोरूटीन में प्रसारित होते हैं और उसे रद्द कर देते हैं। SupervisorJob या SupervisorScope के लिए, अपवाद पृथक होते हैं — एक चाइल्ड कोरूटीन में त्रुटि दूसरों को प्रभावित नहीं करती।

kotlin
val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
scope.launch {
    try {
        riskyOperation()
    } catch (e: Exception) {
        println("पकड़ा गया: ${e.message}")
    }
}
scope.launch {
    println("यह अभी भी SupervisorJob की बदौलत चलता है")
}

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

Android में launch के उपयोग उदाहरण

Android में, launch का उपयोग हर जगह किया जाता है: ViewModel से WorkManager तक। मुख्य पैटर्न घटक जीवनचक्र समाप्त होने पर स्वचालित कोरूटीन रद्दीकरण के लिए Fragment में lifecycleScope और ViewModel में viewModelScope का उपयोग है।

kotlin
class ProfileViewModel : ViewModel() {
    private val repository = UserRepository()

    fun loadProfile(userId: String) {
        viewModelScope.launch(Dispatchers.IO) {
            val profile = repository.fetchProfile(userId)
            withContext(Dispatchers.Main) {
                _profileState.update { it.copy(profile = profile) }
            }
        }
    }
}

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

अक्सर पूछे जाने वाले प्रश्न

Kotlin Coroutines में launch और async में क्या अंतर है?

launch Job लौटाता है और परिणाम नहीं लौटाता, जबकि async परिणाम प्राप्त करने के लिए Deferred<T> लौटाता है। launch का उपयोग fire-and-forget संचालन के लिए किया जाता है, async — जब आपको लौटाए गए मान की प्रतीक्षा करने और उसका उपयोग करने की आवश्यकता होती है।

launch के माध्यम से शुरू किए गए कोरूटीन को कैसे रद्द करें?

सहेजे गए Job ऑब्जेक्ट पर job.cancel() कॉल करें। समूह रद्दीकरण के लिए, scope.cancel() के माध्यम से पूरे CoroutineScope को रद्द करें। कोरूटीन को सहकारी होना चाहिए — isActive जाँचें या रद्द करने योग्य suspend फ़ंक्शन का उपयोग करें।

यदि launch अपवाद फेंकता है तो क्या करें?

launch ब्लॉक के अंदर try-catch का उपयोग करें या CoroutineContext में CoroutineExceptionHandler पास करें। त्रुटि पृथक्करण के लिए SupervisorJob का उपयोग करें — तब एक चाइल्ड कोरूटीन में अपवाद दूसरों को रद्द नहीं करेगा।

क्या launch को CoroutineScope के बिना चलाया जा सकता है?

नहीं, launch CoroutineScope का एक एक्सटेंशन फ़ंक्शन है। बिना scope के, कोरूटीन संरचित सहसमवर्तीता के सिद्धांत का पालन नहीं कर सकता। GlobalScope.launch का सावधानी से उपयोग करें — यह जीवनचक्र से बिना बंधाव का कोरूटीन बनाता है।

एक साथ कितने launch कोरूटीन चलाए जा सकते हैं?

संख्या डिस्पैचर थ्रेड पूल द्वारा सीमित है। Dispatchers.Default CPU कोर की संख्या के बराबर थ्रेड का उपयोग करता है। Dispatchers.IO 64 थ्रेड तक समर्थन करता है। अधिक संख्या में कोरूटीन शुरू करने पर वे कतार में लग जाते हैं।

सारांश

  • launch — fire-and-forget कोरूटीन के लिए मुख्य बिल्डर, Job ऑब्जेक्ट लौटाता है
  • Job नियंत्रण विधियाँ प्रदान करता है: cancel(), join(), isActive, isCancelled, isCompleted
  • संरचित सहसमवर्तीता पैरेंट रद्द होने पर चाइल्ड कोरूटीन के रद्दीकरण की गारंटी देती है
  • अपवाद प्रबंधन Job प्रकार पर निर्भर करता है: सामान्य त्रुटियों का प्रसार करता है, SupervisorJob पृथक करता है
  • lifecycleScope और viewModelScope — Android में कोरूटीन शुरू करने के लिए तैयार समाधान
  • CoroutineStart.LAZY स्पष्ट start() या join() कॉल तक निष्पादन स्थगित करता है
  • launch Android में नेटवर्क अनुरोधों, डेटाबेस लेखन, विश्लेषिकी और कैशिंग के लिए उपयोग होता है

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें