Sobes.tech
Junior — Middle

Go'da çalışan birkaç goroutine'yi zorla nasıl durdurabilirsiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go dilinde, çalışan birkaç goroutine'yi zorla durdurmak için genellikle context.Context aracılığıyla iptal mekanizması kullanılır.

Ana fikir:

  • Bir iptal bağlamı oluşturulur (context.WithCancel veya context.WithTimeout).
  • Her goroutine bu bağlamı alır ve düzenli olarak iptal edilip edilmediğini kontrol eder.
  • İptal fonksiyonu (cancel()) çağrıldığında, tüm goroutine'ler sinyal alır ve düzgün şekilde sona erer.

Örnek:

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

for i := 0; i < 5; i++ {
    go func(id int) {
        for {
            select {
            case <-ctx.Done():
                fmt.Printf("Goroutine %d durduruldu\n", id)
                return
            default:
                // goroutine işi
                time.Sleep(100 * time.Millisecond)
            }
        }
    }(i)
}

// Bir süre sonra tüm goroutine'leri durduruyoruz
time.Sleep(1 * time.Second)
cancel()

// Tamamlanmasını bekle (örneğin, sync.WaitGroup kullanarak)

Bu yaklaşım, birkaç goroutine'nin durdurulmasını merkezi olarak yönetmeye olanak tanır ve kontrolsüz sonlandırma sorunlarını önler.