Android Academy · पाठ

Coroutines और Suspend फ़ंक्शन

ऐसा अतुल्यकालिक कोड लिखें जो तुल्यकालिक कोड जैसा पढ़ा जाए। suspend फ़ंक्शन, coroutine scopes और dispatchers (IO, Main, Default) का उपयोग करें।

पाठ 3, कुल 6 में से11 चरण

Coroutines और Suspend फ़ंक्शन, CoddyKit पर Android Academy का एक निःशुल्क पाठ है। यह 6 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Android Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Android Academy पाठ्यक्रम में कुल 6 पाठ शामिल हैं।

समस्या: UI थ्रेड को अवरुद्ध करना

Android का सारा UI कार्य मुख्य थ्रेड पर चलता है। यदि आप मुख्य थ्रेड पर नेटवर्क अनुरोध या डेटाबेस रीड करते हैं, तो काम पूरा होने तक UI जम जाता है।

यदि UI 5 सेकंड से अधिक समय तक जम जाता है, तो Android ANR (ऐप प्रतिक्रिया नहीं दे रहा) संवाद दिखाता है और उपयोगकर्ता आपके ऐप को बलपूर्वक बंद कर सकता है।

Coroutines क्या हैं

Kotlin Coroutines एसिंक्रोनस कोड लिखने का ऐसा तरीका हैं, जो क्रमिक जैसा दिखाई देता है — न कॉलबैक, न RxJava चेन।

  • हल्के — हज़ारों कॉरूटीन एक साथ चल सकती हैं
  • निलंबनीय — कॉरूटीन थ्रेड को अवरुद्ध किए बिना रुक और फिर शुरू हो सकती है
  • संरचित — ये लाइफ़साइकल (स्कोप) का पालन करती हैं

suspend फ़ंक्शन

suspend से चिह्नित फ़ंक्शन थ्रेड को अवरुद्ध किए बिना अपना निष्पादन रोक सकता है। इसे केवल किसी अन्य suspend फ़ंक्शन या कॉरूटीन स्कोप से ही कॉल किया जा सकता है।

import kotlinx.coroutines.*

suspend fun fetchData(): String {
    delay(1000)  // simulates 1 second network call
    return "Data loaded!"
}

fun main() = runBlocking {
    println("Fetching...")
    val result = fetchData()  // suspends here, doesn't block
    println(result)           // Data loaded!
    println("Done")
}

कॉरूटीन स्कोप

हर कॉरूटीन एक स्कोप के अंदर चलती है, जो उसका लाइफ़साइकल निर्धारित करता है:

  • viewModelScope — ViewModel साफ़ किए जाने पर रद्द हो जाता है
  • lifecycleScope — Activity/Fragment नष्ट होने पर रद्द हो जाता है
  • GlobalScope — हमेशा बना रहता है (इससे बचें)
  • runBlocking — केवल परीक्षण के लिए

launch बनाम async

कॉरूटीन शुरू करने के दो तरीके:

  • launch { } — शुरू करें और परिणाम की प्रतीक्षा न करें, कोई वापसी मान नहीं
  • async { }.await() — ऐसा परिणाम लौटाता है, जिसकी आप प्रतीक्षा कर सकते हैं
import kotlinx.coroutines.*

fun main() = runBlocking {
    // launch: no return value
    launch {
        delay(500)
        println("launch done")
    }

    // async: returns a Deferred<T>
    val deferred = async {
        delay(300)
        42
    }
    val result = deferred.await()
    println("async result: $result")
}

डिस्पैचर: कौन-सा थ्रेड?

Dispatchers यह नियंत्रित करते हैं कि कोरूटीन किस थ्रेड पर चलेगी:

  • Dispatchers.Main — यूआई थ्रेड (व्यू अपडेट करने के लिए)
  • Dispatchers.IO — नेटवर्क और डिस्क से जुड़े कार्यों के लिए
  • Dispatchers.Default — CPU-गहन कार्यों के लिए

कोरूटीन के भीतर डिस्पैचर बदलने के लिए withContext(Dispatchers.IO) { } का उपयोग करें।

viewModelScope का उदाहरण

यूआई को अवरुद्ध किए बिना ViewModel में डेटा प्राप्त करें:

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.*

class DataViewModel : ViewModel() {

    fun loadData() {
        viewModelScope.launch {
            // Switch to IO thread for network
            val data = withContext(Dispatchers.IO) {
                // simulate network request
                delay(1000)
                "Result from server"
            }
            // Back on Main thread — safe to update UI
            _uiState.value = data
        }
    }
}

कोरूटीन में त्रुटि प्रबंधन

सामान्य कोड की तरह, try/catch की सहायता से कोरूटीन के भीतर अपवादों को संभालें:

viewModelScope.launch {
    try {
        val result = withContext(Dispatchers.IO) {
            api.fetchUser()  // may throw IOException
        }
        _user.value = result
    } catch (e: Exception) {
        _error.value = "Failed: ${e.message}"
    }
}

समानांतर कोरूटीन

async/await का उपयोग करके दो कार्यों को समानांतर चलाएँ और दोनों के पूरा होने की प्रतीक्षा करें:

viewModelScope.launch {
    // Both run at the same time!
    val userDeferred = async(Dispatchers.IO) { api.getUser() }
    val postsDeferred = async(Dispatchers.IO) { api.getPosts() }

    val user = userDeferred.await()
    val posts = postsDeferred.await()

    _state.value = UiState(user, posts)
}

त्वरित जाँच

नेटवर्क और डेटाबेस से जुड़े कार्यों के लिए आपको किस कोरूटीन डिस्पैचर का उपयोग करना चाहिए?

पुनरावृत्ति: कोरूटीन

अब आप कॉलबैक के बिना एसिंक्रोनस कोड लिख सकते हैं:

  • suspend fun — थ्रेड को अवरुद्ध किए बिना रुक सकता है
  • viewModelScope.launch { } — ViewModel में कोरूटीन शुरू करता है
  • withContext(Dispatchers.IO) — बैकग्राउंड थ्रेड पर स्विच करता है
  • async { }.await() — परिणाम के साथ समानांतर कार्य
  • कोरूटीन के भीतर try/catch सामान्य रूप से काम करता है

अगला विषय: Repository पैटर्न — डेटा स्रोतों के बीच स्पष्ट पृथक्करण।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Kotlin सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
36
पाठ
152

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

क्या “Coroutines और Suspend फ़ंक्शन” पाठ निःशुल्क है?

हाँ — Android Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Coroutines और Suspend फ़ंक्शन” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Android Academy पाठ्यक्रम में कुल 6 पाठ शामिल हैं।

“Coroutines और Suspend फ़ंक्शन” में मैं क्या सीखूँगा?

ऐसा अतुल्यकालिक कोड लिखें जो तुल्यकालिक कोड जैसा पढ़ा जाए। suspend फ़ंक्शन, coroutine scopes और dispatchers (IO, Main, Default) का उपयोग करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Android Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Android Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Android Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 6 में से 3वाँ पाठ है।

“Coroutines और Suspend फ़ंक्शन” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Android Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Android Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. ViewModel और LiveData
  2. Room डेटाबेस
  3. Coroutines और Suspend फ़ंक्शन
  4. Repository पैटर्न
  5. Navigation Component
  6. Hilt के साथ Dependency Injection
← Android Academy पर वापस जाएँ