Sobes.tech
Senior
42

func (p *Pool) Stop() { p.mu.Unlock() // Енді каналды қауіпсіз түрде жабуға болады close(p.tasks) // жұмысшыларға сигнал: жаңа тапсырмалар болмайды, қалғанын оқып шығыңыз p.wg.Wait() // барлық горутиндердің аяқталуын күтеміз p.cancel() // контекстті кез келген жағдайда жоямыз fmt.Println("Pool тоқтатылды.") } // ForceStop барлық жұмысшыларды күтусіз күшпен тоқтатады. // Жұмысшылар контекст арқылы дереу үзіледі. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Пулды күшпен тоқтату (уақыт шегі: %v)...\n", timeout) // Жаңа тапсырмаларды қосуға тыйым саламыз p.mu.Lock() p.isOpen = false p.mu.Unlock() // Каналды жабамыз, жұмысшылар жаңа тапсырмаларды алмайды close(p.tasks) // Контекстті жоямыз – бұл барлық орындалып жатқан тапсырмаларды тоқтатады p.cancel() // Аяқталуы үшін шектеулі уақыт береміз done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Пулды күшпен тоқтату (барлық жұмысшылар аяқталды)") case <-time.After(timeout): fmt.Println("Пулды күшпен тоқтату (уақыт шегі, мүмкін тоқтап қалған горутиналар бар)") } }

Сұралған компаниялар
Pasul LTD