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.