Sobes.tech
Senior

func (p *Pool) Stop() { p.mu.Unlock() // Artık kanalı güvenle kapatabiliriz close(p.tasks) // işçilere sinyal: yeni görev yok, kalanını okuyun p.wg.Wait() // tüm goroutine'lerin tamamlanmasını bekle p.cancel() // gerekirse bağlamı iptal et fmt.Println("Havuz durduruldu.") } // ForceStop, tüm işçileri görevlerin tamamlanmasını beklemeden zorla durdurur. // İşçiler, bağlam aracılığıyla hemen kesilecektir. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Havuzu zorla durdurma (zaman aşımı: %v)...\n", timeout) // Yeni görev eklemeyi engelle p.mu.Lock() p.isOpen = false p.mu.Unlock() // Kanalı kapat, böylece işçiler yeni görev almayacak close(p.tasks) // Bağlamı iptal et – bu, tüm çalışan görevleri durduracaktır p.cancel() // Sınırlı süre ver, tamamlaması için done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Havuz zorla durduruldu (tüm işçiler tamamlandı)") case <-time.After(timeout): fmt.Println("Havuz zorla durduruldu (zaman aşımı, takılı kalan goroutines olabilir)") } }