таймеры

This commit is contained in:
badkaktus 2019-10-08 11:39:41 +03:00
parent 33465a0288
commit e4cd9bbb7c
3 changed files with 20 additions and 21 deletions

View File

@ -28,8 +28,8 @@ Select
Тайм-ауты (Timeouts) Тайм-ауты (Timeouts)
Неблокируемые операции в каналах (Non-Blocking Channel Operations) Неблокируемые операции в каналах (Non-Blocking Channel Operations)
Закрытие каналов (Closing Channels) Закрытие каналов (Closing Channels)
Range over Channels Перебор значений из каналов (Range over Channels)
Timers Таймеры (Timers)
Tickers Tickers
Worker Pools Worker Pools
WaitGroups WaitGroups

View File

@ -1,8 +1,8 @@
// We often want to execute Go code at some point in the // Часто мы хотим выполнить код Go в какой-то момент в
// future, or repeatedly at some interval. Go's built-in // будущем или повторно через определенный промежуток
// _timer_ and _ticker_ features make both of these tasks // времени. Встроенные функции _таймера_ и _тикера_ Go
// easy. We'll look first at timers and then // облегчают обе эти задачи. Сначала мы рассмотрим
// at [tickers](tickers). // таймеры, а затем [тикеры](tickers).
package main package main
@ -13,22 +13,22 @@ import (
func main() { func main() {
// Timers represent a single event in the future. You // Таймеры позволяет выполнить одно событие в будущем.
// tell the timer how long you want to wait, and it // Вы сообщаете таймеру, как долго вы хотите ждать,
// provides a channel that will be notified at that // и он предоставляет канал, который будет уведомлен
// time. This timer will wait 2 seconds. // в это время. Этот таймер будет ждать 2 секунды.
timer1 := time.NewTimer(2 * time.Second) timer1 := time.NewTimer(2 * time.Second)
// The `<-timer1.C` blocks on the timer's channel `C` // `<-timer1.C` блокирует канал таймера `C` пока
// until it sends a value indicating that the timer // не будет отправлено сообщение о том, что таймер истек
// expired.
<-timer1.C <-timer1.C
fmt.Println("Timer 1 expired") fmt.Println("Timer 1 expired")
// If you just wanted to wait, you could have used // Если бы вы просто хотели подождать, вы могли бы
// `time.Sleep`. One reason a timer may be useful is // использовать `time.Sleep`. Одна из причин, по
// that you can cancel the timer before it expires. // которой таймер может быть полезен, заключается
// Here's an example of that. // в том, что вы можете отменить таймер до его
// истечения, как в этом примере.
timer2 := time.NewTimer(time.Second) timer2 := time.NewTimer(time.Second)
go func() { go func() {
<-timer2.C <-timer2.C

View File

@ -1,6 +1,5 @@
// The first timer will expire ~2s after we start the // Первый таймер истекает через ~2с после запуска программы,
// program, but the second should be stopped before it has // но второй должен быть остановлен до того, как он истечет.
// a chance to expire.
$ go run timers.go $ go run timers.go
Timer 1 expired Timer 1 expired
Timer 2 stopped Timer 2 stopped