Skip to content

一个超轻量级的计划任务,可用于周期性及定时周期性任务,替代go自代的 time.Ticker 机制。

Notifications You must be signed in to change notification settings

aWildProgrammer/goticker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 

Repository files navigation

goticker

一个超轻量级的计划任务,可用于周期性及定时周期性任务,替代go自代的 time.Ticker 机制。扫描任务时默认使用异步非阻塞机制。

由于 go 自带的 time.Ticker 比较弱鸡,仅支持 chan 回写,所以封装在业务里需要大量的工作及协程处理,在性能上消耗很大,所以这里写一个轻量级的分享。

example.go

import ."fmt"
import "github.com/aWildProgrammer/goticker"

func main() {

	task := goticker.New(100, true)
	ch2 := make(chan bool, 0)
	ch4 := make(chan bool, 0)
	id1 := task.AddTaskCallBackFunc(test, 3, "任务111111") // 每间隔3秒执行一次 test 函数
	id2 := task.AddTaskCallBackChannel(ch2, 5) // 每间隔5秒向ch2回写 bool true
	id3 := task.AddCycleTaskCallBackFunc(test, "16:18:55", "任务333333") // 每天 16:18:55 执行一次 test,如果在建立该任务时当前时间已经超过该指定时间,则任务推迟至明天同一时间执行
	id4 := task.AddCycleTaskCallBackChannel(ch4, "16:18:55") // 每天 16:18:55 向ch4回写 bool true,如果在建立该任务时当前时间已经超过该指定时间,则任务推迟至明天同一时间执行

	Println(id1, id2, id3, id4)
	for {
		select {
		case <- ch2:
			Println("任务222222")
		case <- ch4:
			Println("任务444444")
		}
	}
}

func test(args interface{}) {
	Println(args)
}

About

一个超轻量级的计划任务,可用于周期性及定时周期性任务,替代go自代的 time.Ticker 机制。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages