Junior — Middle
Gözlənilən dəyər hələ əldə olunmayıbsa, goroutine-un icrasını necə dayandırmaq olar?
sobes.tech Süni İntellekt
AI-dan cavab
Go dilində, gözləyən və lakin bu dəyər gəlməyə biləcək gorutini dayandırmaq üçün adətən zaman aşımı olan kanallar və ya ləğv edilə bilən kontekst istifadə olunur.
Zaman aşımı ilə nümunə select və time.After istifadə edilərək:
select {
case val := <-ch:
// dəyər alındı, işi davam etdir
case <-time.After(time.Second * 5):
// zaman aşımı, gorutini dayandır
}
Başqa bir üsul isə xaricdən ləğv edilə bilən kontekst (context.Context) istifadə etməkdir:
ctx, cancel := context.WithCancel(context.Background())
go func() {
select {
case val := <-ch:
// val-i emal et
case <-ctx.Done():
// gorutini dayandır
}
}()
// kodun hər hansı yerində cancel() çağırılaraq gorutini dayandırılır
Bu yolla, gorutina sonsuz gözləmədə qalmayacaq və düzgün şəkildə sona çatdırıla bilər.