Sobes.tech
Senior

func (p *Pool) Stop() { p.mu.Unlock() // Jetzt kann der Kanal sicher geschlossen werden close(p.tasks) // Signal an die Worker: keine neuen Aufgaben, den Rest lesen p.wg.Wait() // Warten, bis alle Goroutines beendet sind p.cancel() // Kontext bei Bedarf abbrechen fmt.Println("Pool gestoppt.") } // ForceStop stoppt alle Worker zwangsweise, ohne auf das Ende der Aufgaben zu warten. // Die Worker werden sofort über den Kontext abgebrochen. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Zwangsstopp des Pools (Timeout: %v)...\n", timeout) // Blockiert das Hinzufügen neuer Aufgaben p.mu.Lock() p.isOpen = false p.mu.Unlock() // Schließt den Kanal, damit die Worker keine neuen Aufgaben mehr nehmen close(p.tasks) // Kontext abbrechen – das unterbricht alle laufenden Aufgaben p.cancel() // Begrenzte Zeit für den Abschluss done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Pool zwangsweise gestoppt (alle Worker beendet)") case <-time.After(timeout): fmt.Println("Pool zwangsweise gestoppt (Timeout, es könnten hängen gebliebene Goroutines verbleiben)") } }