Sobes.tech
Junior — Middle

V ktorom časti vykonávania korutín dôjde k nekonečnej slučke, ak je vo vnútri?

sobes.tech AI

Odpoveď od AI

Ak je vnútri coroutine v Android (napríklad s použitím Kotlin Coroutines) prítomný nekonečný cyklus, tento cyklus sa bude vykonávať v okamihu, keď je samotná coroutine volaná, teda pri jej začiatku, čiže pri prvom volaní resume alebo pri spustení cez launch alebo async.

Môžete si predstaviť coroutine ako funkciu, ktorá sa pozastavuje a znovu spúšťa. Ak v tele coroutine je nekonečný cyklus bez bodov pozastavenia (suspend funkcie), potom coroutine zablokuje vlákno, na ktorom je spustená, a bude tento cyklus vykonávať nekonečne.

Aby ste predišli blokovaniu, nekonečné cykly v coroutine zvyčajne obsahujú volania na suspend funkcie, napríklad delay(), ktoré umožňujú coroutine pozastaviť a uvoľniť vlákno.

Príklad nekonečného cyklu s pozastavením:

launch {
    while (true) {
        // nejaká práca
        delay(1000) // pozastavíme coroutine na 1 sekundu
    }
}

Ak chýbajú volania delay alebo iné suspend funkcie, cyklus bude vykonávať sa nekonečne ihneď pri spustení coroutine, blokujúc vlákno.