Sobes.tech
Senior

func (p *Pool) Stop() { p.mu.Unlock() // Agora é seguro fechar o canal close(p.tasks) // sinal aos workers: não haverá mais tarefas, leia o restante p.wg.Wait() // esperamos que todas as goroutines terminem p.cancel() // cancelamos o contexto por precaução fmt.Println("Pool parado.") } // ForceStop força a parada de todos os workers sem esperar que as tarefas terminem. // Os workers serão interrompidos imediatamente através do contexto. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Parando forçosamente o pool (timeout: %v)...\n", timeout) // Bloqueia a adição de novas tarefas p.mu.Lock() p.isOpen = false p.mu.Unlock() // Fecha o canal para que os workers não peguem novas tarefas close(p.tasks) // Cancela o contexto – isso interromperá todas as tarefas em execução p.cancel() // Dá um tempo limitado para finalizar done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Pool parado de força (todos os workers terminados)") case <-time.After(timeout): fmt.Println("Pool parado de força (timeout, podem ficar goroutines penduradas)") } }