Junior — Middle
Kā pareizi apturēt darbojošu goroutine, ja nepieciešams, lai tas beigtos atkarībā no ārēja signāla vai nosacījuma, pat ja rezultāts vēl nav saņemts?
sobes.tech AI
Atbilde no AI
Lai pareizi apturēt darbināmo gorutīnu ar ārēju signālu vai nosacījumu Go valodā, parasti izmanto kontekstu (context.Context) vai kanālus signāla atsaukšanai.
Piemērs ar konteksta izmantošanu:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
// Saņemts atsaukšanas signāls, apturam gorutīnu
return
default:
// Veicam darbu
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// Kādā brīdī izsaucam cancel() lai apturētu gorutīnu
cancel()
}
Šī pieeja ļauj gorutīnai regulāri pārbaudīt, vai ir nosūtīts apturēšanas signāls, un pareizi pabeigt, pat ja rezultāts vēl nav saņemts. Līdzīgi var izmantot kanālu signāla pārraidīšanai, bet context ir idiomātiskāks un ērtāks veids Go valodā.