TICKER · SELECT Trung cấp CA 04 / 08

Tưới cây tự động — sao không for range đơn giản?

Hệ thống tưới cây tự động theo lịch:

ticker := time.NewTicker(15 * time.Second)
defer ticker.Stop()
for {
    select {
    case <-ticker.C:
        waterPlants()
    case <-ctx.Done():
        return   // nhận lệnh dừng, thoát vòng lặp ngay
    }
}

Vì sao dùng select với cả ticker.C VÀ ctx.Done(), thay vì chỉ vòng lặp for range ticker.C { waterPlants() } đơn giản?