Junior — Middle
Xarici siqnal və ya şərtə əsasən, nəticə hələ alınmamış olsa belə, işləyən gorutini düzgün şəkildə necə dayandırmaq olar?
sobes.tech Süni İntellekt
AI-dan cavab
Go dilində işləyən gorutini xarici siqnal və ya şərt ilə düzgün şəkildə dayandırmaq üçün adətən kontekst (context.Context) və ya kanallar istifadə olunur və ləğv siqnalı ötürülür.
Kontekstdən istifadə nümunəsi:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
// Ləğv siqnalı alındı, gorutini yekunlaşdırırıq
return
default:
// İş görürük
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// Bir müddətdən sonra, gorutini dayandırmaq üçün cancel() çağırırıq
cancel()
}
Bu yanaşma gorutinin müntəzəm olaraq dayandırma siqnalı göndərilib-göndərilmədiyini yoxlamasına və düzgün şəkildə bağlanmasına imkan verir, hətta nəticə hələ alınmayıbsa belə. Eynilə, dayandırma siqnalını ötürmək üçün kanal da istifadə oluna bilər, lakin context Go-da daha idiomatika və rahat yoldur.