Sobes.tech
Junior — Middle

Bir goroutine'un kesilmesi veya kendi kendine durması mümkün müdür?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go'da, bir goroutine'nin kendiliğinden sona erdiği birkaç durum vardır:

  • Goroutine, fonksiyonunu tamamladı. Goroutine içinde başlatılan fonksiyon sona erdiğinde, goroutine kapanır.
  • Goroutine içinde panik. Eğer goroutine içinde bir panik oluşur ve yakalanmazsa, goroutine ani şekilde sona erer.
  • Bağlam (context) aracılığıyla iptal. Eğer goroutine, context.Context üzerinden bir iptal sinyali dinliyorsa ve alırsa, düzgün şekilde sona erebilir.

Önemli olan, goroutine'lerin dışarıdan zorla kesilmediğidir — durdurma mekanizmasını kendiniz uygulamalısınız, örneğin kanallar veya bağlamlar aracılığıyla.

Bir goroutine'yi iptal etmek için bağlam kullanımı örneği:

ctx, cancel := context.WithCancel(context.Background())

go func(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Goroutine sona erdi")
            return
        default:
            // çalışma
        }
    }
}(ctx)

// Bir noktada, cancel() çağrılır
cancel()

Bu şekilde, goroutine ya kendi işi bittiğinde sona erer ya da iptal sinyali alınırsa, planlandığı şekilde sona erer.