Sobes.tech
Senior

func (p *Pool) Stop() { p.mu.Unlock() // Teraz je bezpečné zatvoriť kanál close(p.tasks) // signál pracovníkom: žiadne nové úlohy, prečítajte zvyšok p.wg.Wait() // čakáme na dokončenie všetkých goroutine p.cancel() // zrušíme kontext, ak je to potrebné fmt.Println("Pool zastavený.") } // ForceStop nútene zastavuje všetkých pracovníkov bez čakania na dokončenie úloh. // Pracovníci budú okamžite prerušené cez kontext. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Nútené zastavenie poolu (timeout: %v)...\n", timeout) // Blokuje pridávanie nových úloh p.mu.Lock() p.isOpen = false p.mu.Unlock() // Zatvára kanál, aby pracovníci nebrali nové úlohy close(p.tasks) // Zrušíme kontext – to preruší všetky prebiehajúce úlohy p.cancel() // Dáme obmedzený čas na dokončenie done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Pool nútene zastavený (všetci pracovníci ukončení)") case <-time.After(timeout): fmt.Println("Pool nútene zastavený (timeout, môžu zostať visí goroutine)") } }