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.WithCancelveyacontext.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.