Junior — Middle
Je možné kedykoľvek prerušiť vykonávanie Coroutine?
sobes.tech AI
Odpoveď od AI
V Kotlinu nie je možné coroutine prerušiť okamžite a bezpodmienečne v každej situácii. Pre správne prerušenie coroutine je potrebné, aby bola "kooperatívna" — teda, aby periodicky kontrolovala stav zrušenia a naň reagovala.
Prerušenie sa vykonáva volaním cancel(), ale ak vo vnútri coroutine je blokujúci alebo dlhodobo bežiaci kód bez bodov zrušenia (napríklad nekonečný cyklus bez kontrol), nebude možné ju okamžite prerušiť.
Preto je dôležité písať coroutine s podporou na zrušenie, využívajúc suspend funkcie, ktoré samy kontrolujú stav zrušenia, alebo manuálne kontrolovať isActive.
Príklad:
launch {
while (isActive) { // kontrola zrušenia
// práca
delay(100) // suspend funkcia podporujúca zrušenie
}
}
Ak coroutine nepodporuje zrušenie, jej prerušenie bude ťažké alebo nemožné.