Junior — Middle
Go-da kontekst istifadə edərək goroutine-lərin düzgün şəkildə dayandırılması necə mümkündür?
sobes.tech Süni İntellekt
AI-dan cavab
Go dilində goroutine-ləri düzgün şəkildə dayandırmaq üçün tez-tez context paketindən istifadə olunur. İstənilən vaxt ləğv edilə bilən kontekst (context.WithCancel) yaradılır və goroutine-ə ötürülür. Goroutine daxilində, kontekstin vəziyyəti mütəmadi olaraq <-ctx.Done() vasitəsilə yoxlanılır. Ləğv funksiyası çağırıldıqda, Done() kanalı bağlanır və goroutine düzgün şəkildə sona çatdırılır.
Nümunə:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine dayandırıldı")
return
default:
// iş yerinə yetirilir
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// bir müddət sonra goroutine-ı dayandırırıq
time.Sleep(time.Second)
cancel()
time.Sleep(time.Millisecond * 100) // goroutine-in bitməsinə imkan verir
}
Bu yanaşma, goroutine-ləri təhlükəsiz və nəzarətli şəkildə dayandırmağa imkan verir, təhlükəsiz olmayan metodlardan istifadə etmədən.