Sobes.tech
Senior

func (p *Pool) Stop() { p.mu.Unlock() // Tagad ir droši aizvērt kanālu close(p.tasks) // signāls darbiniekiem: jaunu uzdevumu nebūs, lasiet pārējo p.wg.Wait() // gaidām, līdz visas goroutines pabeigsies p.cancel() // gadījumā atceļam kontekstu fmt.Println("Pool apturēts.") } // ForceStop piespiedu kārtā aptur visus darbiniekus, nesagaidot uzdevumu pabeigšanu. // Darbinieki tiks nekavējoties pārtraukti caur kontekstu. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Piesaistes apturēšana (laika limits: %v)...\n", timeout) // Bloķē jaunu uzdevumu pievienošanu p.mu.Lock() p.isOpen = false p.mu.Unlock() // Aizver kanālu, lai darbinieki neņemtu jaunus uzdevumus close(p.tasks) // Atceļ kontekstu – tas pārtrauks visus pašreizējos uzdevumus p.cancel() // Dod ierobežotu laiku pabeigšanai done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Pool piespiedu kārtā apturēts (visi darbinieki pabeiguši)") case <-time.After(timeout): fmt.Println("Pool piespiedu kārtā apturēts (laika limits, var palikt pakarēju goroutine)") } }