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.