Coroutine Scope এবং Context

Coroutines এবং Asynchronous Programming - কটলিন (Kotlin) - Mobile App Development

324

Coroutines কটলিনের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংকে সহজ করে। এর সঠিক ব্যবহারের জন্য Coroutine Scope এবং Coroutine Context এর ধারণা বোঝা খুবই জরুরি। 

Coroutine Scope এবং Context

নিচে এদের সম্পর্কে বিস্তারিত আলোচনা করা হলো।


১. Coroutine Scope

Coroutine Scope একটি কনটেক্সট তৈরি করে যা নির্ধারণ করে coroutines কিভাবে এবং কোথায় চালানো হবে। এটি একটি coroutine-এর জীবনচক্র এবং ব্যবস্থাপনা পরিচালনা করে।

i) Scope এর ভূমিকা

  • Lifecycle Management: Coroutine scope-এর মধ্যে তৈরি করা coroutines এর জীবনচক্র সেই scope-এর জীবনচক্রের সাথে যুক্ত থাকে। যখন scope শেষ হয়, তখন সেই scope-এর সব coroutine স্বয়ংক্রিয়ভাবে বাতিল হয়।
  • Structured Concurrency: Coroutine scope structured concurrency কে সমর্থন করে, যা নিশ্চিত করে যে coroutines সঠিকভাবে সম্পন্ন হয় এবং resources সঠিকভাবে মুক্ত হয়।

ii) Coroutine Scope-এর উদাহরণ

import kotlinx.coroutines.*

fun main() = runBlocking { // runBlocking একটি coroutine scope
    launch { // নতুন coroutine তৈরি
        delay(1000L)
        println("World!")
    }
    println("Hello,") // এটি তাত্ক্ষণিকভাবে চলবে
}

ব্যাখ্যা:

  • এখানে runBlocking একটি coroutine scope তৈরি করেছে, যার ভিতরে launch ব্যবহার করে একটি নতুন coroutine শুরু করা হয়েছে। runBlocking ব্লকটি শেষ না হওয়া পর্যন্ত মেইন থ্রেড ব্লক থাকে।

২. Coroutine Context

Coroutine Context হলো একটি coroutine-এর সব তথ্য ধারণকারী একটি অবজেক্ট। এটি coroutine-এর বিভিন্ন বৈশিষ্ট্য যেমন, dispatcher, job, এবং coroutine name ধারণ করে।

i) Context-এর উপাদান

  • Dispatcher: এটি নির্ধারণ করে coroutine কোন থ্রেডে চলবে। উদাহরণস্বরূপ, Dispatchers.Main, Dispatchers.IO, এবং Dispatchers.Default
  • Job: এটি coroutine-এর জীবনচক্র নিয়ন্ত্রণ করে এবং এটিকে বাতিল করতে সক্ষম করে। আপনি একটি coroutine-এর সাথে একটি Job যুক্ত করতে পারেন।
  • Coroutine Name: এটি coroutine-এর নাম নির্ধারণ করে, যা debugging এর জন্য সহায়ক হতে পারে।

ii) Coroutine Context-এর উদাহরণ

import kotlinx.coroutines.*

fun main() = runBlocking {
    val job = launch(Dispatchers.IO) { // IO dispatcher ব্যবহার করে coroutine শুরু
        println("Running on thread: ${Thread.currentThread().name}")
    }
    job.join() // Coroutine সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করুন
}

ব্যাখ্যা:

  • এখানে launch(Dispatchers.IO) ব্যবহার করে coroutine তৈরি করা হয়েছে, যা IO কাজের জন্য উপযুক্ত। job.join() coroutine শেষ হওয়া পর্যন্ত অপেক্ষা করে।

৩. Coroutine Scope এবং Context এর মধ্যে পার্থক্য

বৈশিষ্ট্যCoroutine ScopeCoroutine Context
DefinitionCoroutine-এর জীবনচক্র নির্ধারণ করেCoroutine-এর বৈশিষ্ট্য এবং তথ্য ধারণ করে
PurposeStructured concurrency এবং lifecycle managementDispatcher, Job, Coroutine Name ইত্যাদি ধারণ করে
UsageCoroutine তৈরি করার সময় scope ব্যবহৃত হয়Coroutine তৈরি বা চালানোর সময় context নির্ধারণ করে

৪. Coroutine Context এর সাথে Customization

আপনি নিজের coroutine context তৈরি করতে পারেন, যেখানে dispatcher, job, এবং অন্যান্য প্রোপার্টি অন্তর্ভুক্ত করা হয়।

উদাহরণ:

fun main() = runBlocking {
    val customContext = Job() + Dispatchers.Default // Custom context তৈরি
    val job = launch(customContext) {
        println("Running on thread: ${Thread.currentThread().name}")
    }
    job.join() // Coroutine সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করুন
}

ব্যাখ্যা:

  • এখানে customContext তৈরি করা হয়েছে যা Job এবং Dispatchers.Default একত্রিত করেছে।

 

Coroutine Scope এবং Coroutine Context কটলিনে coroutines পরিচালনার জন্য গুরুত্বপূর্ণ। Scope coroutine-এর জীবনচক্র এবং ব্যবস্থাপনা নিশ্চিত করে, যেখানে Context coroutine-এর বিভিন্ন বৈশিষ্ট্য ধারণ করে। এই দুটির সঠিক ব্যবহার অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংকে আরও কার্যকর এবং সংগঠিত করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...