Sobes.tech
Junior — Middle

როგორ უნდა მოიქცეთ გამონაკლისების მართვა, როდესაც იწყებთ კორუტინებს, გამოიყენეთ try/catch, რომელიც განთავსებულია launch ფუნქციის გარეთ?

sobes.tech AI

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

Kotlin- ში, ის გამონაკლისები, რომლებიც წარმოიქმნება კორუტინების შიგნით, შეუძლებელია ჩვეულებრივი try/catch-ით იპოვოთ, თუ ისინი განთავსებულია გარე launch ფუნქციის, რადგან launch იწყებს კორუტინას ასინქრონულად და დაუყოვნებლივ აბრუნებს Job ობიექტს, ხოლო გამონაკლისები უკვე ხდება სხვა კონტექსტში.

გამონაკლისების მართვისთვის, საჭიროა გამოიყენოთ მენეჯერები კორუტინაში ან სპეციალური მექანიზმები:

  • გამოიყენეთ CoroutineExceptionHandler კორუტინის კონტექსტის შექმნისას.
  • მართეთ გამონაკლისები კორუტინის შიგნით try/catch-ით.
  • async-ით დაწყებული კორუტინებისთვის, გამონაკლისს შეიძლება იპოვოთ await()-ის გამოძახებისას.

მაგალითი CoroutineExceptionHandler-თან:

val handler = CoroutineExceptionHandler { _, exception ->
    println("დასაფიქსირებელი გამონაკლისი: ${exception.message}")
}

val job = CoroutineScope(Dispatchers.Default + handler).launch {
    throw RuntimeException("შეცდომა კორუტინაში")
}

job.join()

ამ გზით, launch-ის გარეთ try/catch არ იმუშავებს, ის უნდა იპოვოთ კორუტინაში ან გამოიყენოთ CoroutineExceptionHandler.