"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso encerrar graciosamente várias goroutinas em Go?

Como posso encerrar graciosamente várias goroutinas em Go?

Postado em 2025-02-07
Navegar:853

How Can I Gracefully Terminate Multiple Goroutines in Go?

coordenando o término de múltiplas goroutines

ao trabalhar com várias goroutinas em Golang, geralmente é necessário sincronizar sua execução que eles denominam juntos . Uma abordagem comum é utilizar um canal para sinalizar a conclusão. No entanto, esse método pode levar a um pânico "gravar para o canal fechado" se as goroutinas não terminarem na ordem esperada. Melhor solução envolve o uso de contextos. Os contextos fornecem um mecanismo de comunicação e cancelamento entre goroutines. Veja como você pode implementar isso em go:

pacote principal do pacote importação ( "contexto" "Sync" ) func main () { // Crie um contexto e uma função para cancelá -lo ctx, cancel: = context.withCancel (context.background ()) // Inicialize um grupo de espera para rastrear a conclusão da Goroutine wg: = sync.waitgroup {} wg.add (3) // Adicione 3 goroutines ao grupo de espera // Lançar três goroutinas // Cada goroutine ouve o contexto a ser feito vá func () { adiar wg.done () para { Selecione { caso Neste exemplo, quando a terceira goroutina concluir suas operações, cancela o contexto. Isso propaga o cancelamento para as outras goroutinas, fazendo com que elas também terminem. Usando contextos, eliminamos o potencial de pânico e garantimos que todas as goroutinas coordenam sua rescisão de maneira eficaz.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3