Sobes.tech
Junior — Middle

როგორ განსხვავდება SupervisorJob ჩვეულებრივი Job-დან კორუტინებისა და დავალებების მართვის კონტექსტში?

sobes.tech AI

პასუხი AI-სგან

Kotlin- ში, Job კორუტინებში წარმოადგენს ამოცანას, რომელიც შეიძლება გაუქმდეს და რომელიც კორუტინების იერარქიაში იწარმოება. SupervisorJob არის სპეციალური ტიპის Job, რომელიც განსხვავდება მისი ქცევით გამონაკლისების დროს შვილობილი კორუტინებში.

ძირითადი განსხვავება:

  • Job: თუ ერთ-ერთი შვილობილი კორუტინა დასრულდება შეცდომით, ეს შეცდომა გაუქმებს მთელ მშობელ Job-ს და ყველა სხვა შვილობილი კორუტინას.
  • SupervisorJob: შეცდომა ერთ შვილობილ კორუტინაში არ გაუქმებს სხვა შვილობილ კორუტინებს და მშობელ Job-ს. ეს საშუალებას აძლევს შეცდომების იზოლირებას და სხვა დავალებების გაგრძელებას.

მაგალითი:

val supervisor = SupervisorJob()
val scope = CoroutineScope(Dispatchers.Default + supervisor)

scope.launch {
    launch {
        // ეს კორუტინა ჩავარდება გამონაკლისით
        throw Exception("შეცდომა შვილობილი კორუტინაში")
    }
    launch {
        // ეს კორუტინა გააგრძელებს მუშაობას, მიუხედავად სხვა შეცდომის
        delay(1000)
        println("შესრულება გრძელდება")
    }
}

SupervisorJob-ის გამოყენება სასარგებლოა, როდესაც გსურთ, რომ ერთი დავალების წარუმატებლობა არ ზეგავლენდეს სხვა პარალელური დავალებების შესრულებაზე.