Sobes.tech
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.