Sobes.tech
Junior — Middle

Goroutine'ning to'xtatilishi yoki o'z-o'zidan to'xtashi mumkinmi?

sobes.tech AI

AIdan javob

Go'da, goroutine bajarilishini bir nechta holatlar o'z-o'zidan to'xtatishi mumkin:

  • Goroutine o'z funksiyasini yakunladi. Goroutine ichida ishga tushirilgan funksiya tugagach, goroutine yakunlanadi.
  • Goroutine ichida panika. Agar goroutine ichida panika yuzaga kelsa va u boshqarilmasa, u avto tarzda tugaydi.
  • Kontekst (context) orqali bekor qilish. Agar goroutine context.Context orqali bekor qilish signalini eshitib, oladigan bo'lsa, u to'g'ri yakunlanishi mumkin.

Muhim bo'lib, goroutine'lar tashqaridan majburan uzilmaydi — to'xtatish mexanizmini o'zingiz amalga oshirishingiz kerak, masalan, kanallar yoki kontekstlar orqali.

Kontekst yordamida goroutine'ni bekor qilish misoli:

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

go func(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Goroutine yakunlandi")
            return
        default:
            // ish
        }
    }
}(ctx)

// Biron vaqt, cancel() chaqiramiz
cancel()

Shu tarzda, goroutine yoki o'z ishini tugatgach, yoki bekor qilish signali olgach, to'xtaydi, agar bu nazarda tutilgan bo'lsa.