CodeBlanks Logo Icon CodeBlanks

timeout ile select

time.After ile select içinde timeout kullanmayı öğrenirsin.

timeout ile select

time.After ile select'e zaman aşımı eklersin. Belirli süre içinde hiçbir case hazır olmazsa timeout case'i çalışır. Bu, sonsuz bekleme riskini ortadan kaldırır.

Kalıp: case <-time.After(2 * time.Second):. Bu, 2 saniye sonra sinyal gönderen bir channel döndürür. select onu bekler; süre dolunca timeout case'i çalışır ve goroutine çıkar veya başka iş yapar.

Timeout deseni

Timeout deseni production'da kritiktir: bir servise istek gönderirken yanıt belirli sürede gelmezse vazgeçersin. Bu, sistemi bloklanmış goroutine'lerle doldurmamayı sağlar.

context.WithTimeout daha temiz bir alternatif sağlar; timeout'u context olarak taşır ve iptal sinyali de verir. İleri düzey derslerde context detaylı işlenir.

Uygulama Timeout ile bekle

main içine bir select { case ... case <-time.After(...): ... } bloğu ve fmt.Println ile zaman aşımı yazdır.

Başlangıç kodu

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import "fmt"

func main() {
    ch := make(chan string)
    select {
    case m := <-ch:
        fmt.Println(m)
    default:
        fmt.Println("zaman aşımı")
    }
}

Beklenen çıktı

zaman aşımı

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 time.After ne döndürür?

  • Bir süre
  • Bir goroutine
  • Bir hata
  • Bir channel Doğru cevap

Açıklama: bir channel. Süre time.Duration türündedir, time.After channel döndürür.

2 Timeout case

Soru
select {
case v := <-ch:
    fmt.Println(v)
case <-time.After(____):
    fmt.Println("zaman aşımı")
}
Cevap
select {
case v := <-ch:
    fmt.Println(v)
case <-time.After(2 * time.Second):
    fmt.Println("zaman aşımı")
}

Açıklama: 2 sayı, time süre türüdür.

3 Timeout kavramlarını eşleştir

Kavram Anlamı
time.After Zaman aşımı
select Bekleme
channel Sinyal
default Non-blocking

Orta seviye bölümündeki tüm dersler