cpp

Каналы. Функция After()

Как вы уже знаете, если указаны только блоки case, то текущий поток блокируется до появления данных в каком-либо канале. С помощью функции After() из пакета time мы можем ограничить время ожидания данных. Формат функции:

// import "time"
time.After(d time.Duration) <-chan time.Time

В качестве параметра задается время ожидания. По истечение указанного срока в канал записывается экземпляр структуры Time с текущей датой и временем (листинг 18.18).

Листинг 18.18. Функция After()

package main

import (
   "fmt"
   "time"
)

func main() {
   ch := make(chan int)
   go func() {
      time.Sleep(time.Second * 12)
      ch <- 10
   }()
   select {
   case v := <-ch:
      fmt.Println("ch:", v)
   case v := <-time.After(time.Second * 10):
      fmt.Println("Время ожидания истекло")
      fmt.Println(v)
   }
   fmt.Println("Конец функции main()")
}

Результат после десяти секунд ожидания:

Время ожидания истекло
2022-04-29 22:48:51.7793199 +0300 MSK m=+10.015289401
Конец функции main()

Если увеличим время ожидания до двадцати секунд, то результат будет таким:

ch: 10
Конец функции main()

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp