Sobes.tech
Senior

func (p *Pool) Stop() { p.mu.Unlock() // Nyní je bezpečné uzavřít kanál close(p.tasks) // signál pracovníkům: žádné nové úkoly, přečtěte zbytek p.wg.Wait() // čekáme na dokončení všech gorutin p.cancel() // v případě potřeby zrušíme kontext fmt.Println("Pool zastaven.") } // ForceStop násilně zastavuje všechny pracovníky bez čekání na dokončení úkolů. // Pracovníci budou okamžitě přerušeni přes kontext. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Násilné zastavení poolu (timeout: %v)...\n", timeout) // Blokuje přidávání nových úkolů p.mu.Lock() p.isOpen = false p.mu.Unlock() // Uzavře kanál, aby pracovníci nebrali nové úkoly close(p.tasks) // Zruší kontext – to přeruší všechny probíhající úkoly p.cancel() // Dává omezený čas na dokončení done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Pool násilně zastaven (všichni pracovníci ukončeni)") case <-time.After(timeout): fmt.Println("Pool násilně zastaven (timeout, mohou zůstat visící goroutines)") } }