14.5 通道、超时和计时器(Ticker)

Kesa...小于 1 分钟

14.5 通道、超时和计时器(Ticker)

14.5.1 计时器

time.Ticker, 可以指定时间间隔重复向通道c发送时间值:

type Ticker struct {
    C <-chan Time // the channel on which the ticks are delivered.
    // contains filtered or unexported fields
    ...
}

通过工厂函数func NewTicker(dur) *Ticker指定时间间隔。

time.Tick(): Tick(d Duration) <-chan Time 返回通道。

14.5.2 定时器

定时器 (Timer) 结构体看上去和计时器 (Ticker) 结构体的确很像(构造为 NewTimer(d Duration)),但是它只发送一次时间,在 Dration d 之后。

time.After(): func After(d Duration) <-chan Time

14_5_timer.go

package chapter_14

import (
	"fmt"
	"time"
)

func mainTimer() {
	tick := time.Tick(time.Second)
	timer := time.After(5 * time.Second)
	for {
		select {
		case <-tick:
			fmt.Println("tick")
		case <-timer:
			fmt.Println("boom")
			return
		default:
			fmt.Println(".")
			time.Sleep(500 * time.Millisecond)
		}
	}
}

.
.
tick
.
.
tick
.
.
tick
.
.
tick
.
.
tick
boom
上次编辑于:
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.2