Coroutine Scope در کاتلین | Coroutine Context
در آموزش قبلی به آموزش ابتدایی coroutines در کاتلین پرداختیم و در این جلسه قصد داریم به مبجث Scope در coroutines بپردازیم. تا از کاربردهای Scope ها در coroutines آشنا شویم.
Scope چیست؟
Scope به سادگی متدهای چرخه حیات (lifecycle) را برای coroutine ارائه می دهد و به ما اجازه می دهد تا coroutine ها را برای شروع و توقف آنها مدیریت کنیم.
GlobalScope.launch { }
در حال حاضر هنگامی که کد کلمه hello را در مقاله قبلی خود run کنیم ، GlobalScope را مشاهده کرده ایم. بنابراین GlobalScope ، به سادگی به این معنی است که Scope این coroutine ، کل برنامه است. در این صورت تمام نمی شود ، اگر در پس زمینه اجرا شود همچنین متوقف نمی شود مگر اینکه کل برنامه متوقف شود.
نکته ای که باید در نظر گرفت این است که scope بسیار بزرگی است و معمولاً استفاده نمی شود. ما از آن در برنامه HelloWord استفاده کردیم زیرا بسیار ساده و آسان بود. همچنین به ما اجازه می دهد تا یک background thread ایجاد کنیم که معمولا زیاد استفاده نمی شود.
runBlocking
مورد بعدی runBlocking است . اکنون آن را اجرا کنید و coroutine را به صورت مسدود کننده ،run کنید. بنابراین این بار دیگر شما از آن زیاد استفاده نمی کنید. تنها زمانی می توانید از آن استفاده کنید که بخواهید اجرای یک کد را متوقف کرده و coroutines خود را اجرا کنید.
در موقعیتهای دیگر که ممکن است بخواهید از آن استفاده کنید، در صورتی که تنها کاری است که برنامه شما انجام میدهد. تا زمانی که این تنها چیزی است که شما سعی دارید آن را انجام دهید ما کاملاً به طور گسترده در مثالهای خود از آن استفاده خواهیم کرد.
runBlocking {
launch {
delay(1000L)
println("Task from runBlocking")
}
coroutinesScope { } coroutinesScope ، scope جدیدی ایجاد می کند و تا زمان کامل شدن فرزندهای (childrens) coroutine کامل نمی شود. بنابراین ما یک scope ایجاد می کنیم ، coroutine را اجرا می کنیم و در داخل scope ، می توانیم coroutine های دیگر ایجاد کنیم. این coroutine که از اینجا شروع می شود تا زمانی که تمام coroutine های داخلی نیز کامل نشوند تکمیل نمی شود.
coroutineScope {
launch {
delay(1500L)
println("Task from coroutineScope")
}
}
Coroutine Context
Context ارتباط تنگاتنگی با Scope دارد. بنابراین می توان گفت Scope و Context بسیار مشابه هستند. آنها اساساً مفاهیمی هستند که به راه های مختلف مورد استفاده قرار می گیرند.
Context ، مجموعه ای از داده ها است که مربوط به coroutine هستند. به عبارت ساده ، Context مجموعه ای از متغیرها است که می توانید در داخل coroutine به آنها دسترسی پیدا کنید. همه coroutine دارای Context مرتبط هستند
Scope و Context بسیار مشابه هستند تنها تفاوت این است که Scope استفاده شده برای ایجاد و مدیریت coroutine استفاده می شود. در حالی که Context مجموعه ای از متغیرها و داده های مرتبط با آن coroutine است.
عنصر (Element)مهم در Coroutines Context
Dispatcher – به سادگی تصمیم می گیرد که coroutine روی کدام Thread اجرا می شود.
Job – اساساً LifeCycle(چرخه حیات) coroutine را اداره می کند.
import kotlinx.coroutines.CoroutineName
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
fun main() {
runBlocking {
launch(CoroutineName("myCoroutine")) {
println("This is run from ${coroutineContext.get(CoroutineName.Key)}")
}
}
}
در قطعه کد بالا ، یک تابع به نام CoroutineName (“myCoroutine”) را ارسال کردیم که به جای myCoroutine می توانید نامی را در اینجا وارد کنید. در داخل Coroutine ، ما به سادگی برخی از پیام ها را چاپ می کنیم. حالا اگر کد را اجرا کنید ، نتیجه ای مانند تصویر زیر دریافت می کنید. بنابراین در اینجا coroutine context وجود دارد.This is run from CoroutineName(myCoroutine)
خلاصه·
- Scope – متدهای LifeCycle را برای coroutines ارائه می دهد و به ما امکان می دهد تا coroutines را شروع و متوقف کنیم
- {} GlobalScope.launch – Scope coroutine چرخه حیات (LifeCycle) کل برنامه است.
- runBlocking – یک Scope ایجاد می کند و یک coroutine را به صورت مسدود کننده اجرا می کند.
- {} coroutineScope – یک Scope جدید ایجاد می کند و تا زمانی که همه فرزندان coroutine کامل نشوند ، کامل نخواهد شد.
نتیجه گیری
در این آموزش با Scope های کتابخانه Coroutine در کاتلین پرداختیم تا بتوایند مدیریت بهتری روی Coroutine داشته باشید و دیگه نیازی به استفاده از Thread ها نداشته باشید.خیلی خوشحال می شوم نظرات خودتون رو برای من در بخش نظرات ارسال نمایید.
1 دیدگاه
اولین کسی باشید که در مورد این مطلب اظهار نظر می کند.
نکات کلیدی و مهمی در این مقاله اشاره شده بود.
این مقاله برای من خیلی آموزنده بود. ممنون.