Sobes.tech
Senior

func (p *Pool) Stop() { p.mu.Unlock() // İndi kanal təhlükəsiz şəkildə bağlana bilər close(p.tasks) // işçilərə siqnal: yeni tapşırıq olmayacaq, qalanını oxu p.wg.Wait() // bütün gorutinaların tamamlanmasını gözləyirik p.cancel() // ehtiyat üçün konteksti ləğv et fmt.Println("Pool dayandırıldı.") } // ForceStop bütün işçiləri tapşırıqlar tamamlanmadan zorla dayandırır. // İşçilər dərhal kontekst vasitəsilə kəsiləcək. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Pool-u zorla dayandırma (zaman aşımı: %v)...\n", timeout) // Yeni tapşırıqların əlavə olunmasını bloklayır p.mu.Lock() p.isOpen = false p.mu.Unlock() // Kanalı bağlayır ki, işçilər yeni tapşırıq götürməsin close(p.tasks) // Konteksti ləğv et – bu, bütün yerinə yetirilən tapşırıqları kəsəcək p.cancel() // Tamamlama üçün məhdud vaxt verilir done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Pool zorla dayandırıldı (bütün işçilər tamamlandı)") case <-time.After(timeout): fmt.Println("Pool zorla dayandırıldı (zaman aşımı, asılı qalan gorutinalar qala bilər)") } }