Junior — Middle
Beklenen değere ulaşılmadıysa, goroutine'un çalışmasını nasıl durdurabilirsiniz?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go dilinde, değeri bekleyen ancak bu değer gelmeyebilecek bir goroutine'yi durdurmak için genellikle zaman aşımı olan kanallar veya iptal edilen bir bağlam kullanılır.
Zaman aşımı örneği, select ve time.After kullanılarak:
select {
case val := <-ch:
// değer alındı, çalışmaya devam et
case <-time.After(time.Second * 5):
// zaman aşımı, goroutine'yi durdur
}
Başka bir yöntem ise dışarıdan iptal edilebilen bir bağlam (context.Context) kullanmaktır:
ctx, cancel := context.WithCancel(context.Background())
go func() {
select {
case val := <-ch:
// val'i işle
case <-ctx.Done():
// goroutine'yi durdur
}
}()
// kodun herhangi bir yerinde cancel() çağrılarak goroutine durdurulur
Bu şekilde, goroutine sonsuz beklemede kalmaz ve düzgün bir şekilde sona erdirilebilir.