Sobes.tech
Senior

func (p *Pool) Stop() { p.mu.Unlock() // Dabar saugu yra uždaryti kanalą close(p.tasks) // signalas darbuotojams: naujų užduočių nebus, skaitykite likusį p.wg.Wait() // laukiame, kol visi gorutinai baigsis p.cancel() // atšaukia kontekstą, jei reikia fmt.Println("Pool sustabdytas.") } // ForceStop priverstinai sustabdo visus darbuotojus be laukimo, kol užduotys bus baigtos. // Darbuotojai bus nedelsiant nutraukti per kontekstą. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Priverstinis pulo sustabdymas (laiko limitas: %v)...\n", timeout) // Blokuoja naujų užduočių pridėjimą p.mu.Lock() p.isOpen = false p.mu.Unlock() // Uždaro kanalą, kad darbuotojai neimtų naujų užduočių close(p.tasks) // Atšaukia kontekstą – tai nutrauks visas vykdomas užduotis p.cancel() // Suteikia ribotą laiką užbaigimui done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Pool priverstinai sustabdytas (visi darbuotojai baigė)") case <-time.After(timeout): fmt.Println("Pool priverstinai sustabdytas (laiko limitas, gali likti pakabintų goroutine)") } }