如何打断ticker定时器的阻塞状态(go)

Posted 我要出家当道士

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何打断ticker定时器的阻塞状态(go)相关的知识,希望对你有一定的参考价值。

简介

      如下代码所示,一个线程负责处理定时任务,如果发生紧急事件需要打断当前正在阻塞等待执行的任务,可以通过重置另一个并行的定时器来打断阻塞。
      代码很简单,备份自用
package main

import (
	"fmt"
	"log"
	"time"
)

type Student struct {
	name string
	age int
}
var tick = time.NewTicker(1)
var tickSign = time.NewTicker(time.Hour)

var a =  0
func test(){
	for{
		tick.Reset(time.Second * 10)
		select {
		case <- tick.C:
			log.Print("tick tick tick")
		case <- tickSign.C:
			log.Print("tickSign tickSign tickSign")
			tickSign.Reset(time.Hour)
			continue
		}
	}
}
func test1()  {
	go test()
	n := 0
	for{
		fmt.Scan(&n)
		tickSign.Reset(time.Nanosecond * time.Duration(n))
	}
}
func main()  {
	test1()
}

以上是关于如何打断ticker定时器的阻塞状态(go)的主要内容,如果未能解决你的问题,请参考以下文章

Go的定时器之Time.Ticker

go语言中的timer 和ticker定时任务

ticker定时器:

WorkerMan 阻塞导致队列服务不稳定的问题

golang中定时器实现,Ticker,Timer

golang中定时器实现,Ticker,Timer