Sobes.tech
Junior — Middle

Vai ir iespējama situācija, kad gorutina tiks pārtraukta vai pati apstāsies?

sobes.tech AI

Atbilde no AI

Go valodā gorutīnas izpilde var beidzoties pašas par sevi dažādos gadījumos:

  • Gorutīna ir pabeigusi savu funkciju. Tiklīdz funkcija, kas palaista gorutīnā, beidzas, gorutīna tiek slēgta.
  • Panikas iekšā gorutīnā. Ja notiek panika gorutīnā un tā netiek apstrādāta, tā strauji beigs darbu.
  • Atcelšana caur kontekstu (context). Ja gorutīna klausās atcelšanas signālu caur context.Context un to saņem, tā var pareizi beigt darbu.

Svarīgi ir saprast, ka gorutīnas nav obligāti pārtrauktas no ārpuses — jums pašiem jāievieš apturēšanas mehānisms, piemēram, caur kanāliem vai kontekstiem.

Piemērs, kā izmantot kontekstu gorutīnas atcelšanai:

ctx, cancel := context.WithCancel(context.Background())

go func(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Gorutīna ir pabeigusi")
            return
        default:
            // darbs
        }
    }
}(ctx)

// Kāda brīdī izsaucam cancel()
cancel()

Tādējādi, gorutīna vai nu pati beigs darbu pēc tā pabeigšanas, vai arī saņems atcelšanas signālu, ja tas ir paredzēts.