💬Как реализовать тайм-ауты для каналов в Go?
🔸Применение
🔸В некоторых языках для реализации тайм-аута может потребоваться реализовать управление потоками, но
🔸Здесь нет оператора de
🔸Применение
select
для мультиплексирования каналов открывает широкие возможности и помогает сделать сложные или утомительные задачи тривиально простыми. 🔸В некоторых языках для реализации тайм-аута может потребоваться реализовать управление потоками, но
select
с вызовом функции time.After
, возвращающей канал, через который будет отправлено сообщение после истечения указанного времени, делает эту задачу очень простой:
var ch chan int
select {
case m := <-ch:
fmt.Println(m)
case <-time.After(10 * time.Second):
fmt.Println("Timed out")
}
🔸Здесь нет оператора de
fault,
поэтому select
з
аблокируется до выполнения одного из условий. Если канал ch н
е станет доступным для чтения до того, как в канал, возвращаемый функцией time.After,
будет записано сообщение, то сработает второй оператор case и инструкция select
з
авершится по тайм-ауту.