Junior — Middle
Ako zabezpečiť, aby všetky spustené gorutiny v programe boli dokončené?
sobes.tech AI
Odpoveď od AI
V jazyku Go neexistuje zabudovaný spôsob, ako nútene ukončiť gorutinu zvonku. Aby ste zabezpečili, že všetky spustené gorutiny sa ukončia, zvyčajne sa používa synchronizácia pomocou sync.WaitGroup.
Princíp fungovania:
- Pred spustením každej gorutiny sa zavolá
wg.Add(1). - Na konci gorutiny sa zavolá
wg.Done(). - V hlavnej funkcii sa zavolá
wg.Wait(), ktoré blokuje vykonávanie, kým číselník nedosiahne nulu.
Príklad:
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
// práca gorutiny
}()
wg.Wait() // počkať na dokončenie všetkých gorútin
Týmto spôsobom program garantovane počká na dokončenie všetkých gorútin pred pokračovaním alebo ukončením.