Sobes.tech
Senior

func (p *Pool) Stop() { p.mu.Unlock() // Nu kan nu veilig de kanaal sluiten close(p.tasks) // signaal aan de workers: geen nieuwe taken, lees de rest p.wg.Wait() // wachten tot alle goroutines klaar zijn p.cancel() // annuleer de context voor de zekerheid fmt.Println("Pool gestopt.") } // ForceStop forceert het stoppen van alle workers zonder te wachten op het voltooien van taken. // De workers worden onmiddellijk onderbroken via de context. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Forceren van het stoppen van de pool (timeout: %v)...\n", timeout) // Blokkeer het toevoegen van nieuwe taken p.mu.Lock() p.isOpen = false p.mu.Unlock() // Sluit het kanaal zodat de workers geen nieuwe taken meer nemen close(p.tasks) // Annuleer de context – dit onderbreekt alle lopende taken p.cancel() // Geef een beperkte tijd voor het afronden done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Pool force gestopt (alle workers beëindigd)") case <-time.After(timeout): fmt.Println("Pool force gestopt (timeout, kunnen hangende goroutines blijven)") } }