type DoTask interface {
Excute()
}
var tasklist []interface{}
func AddTask(controller DoTask) {
var arr interface{}
arr = controller
tasklist = append(tasklist,arr)
fmt.Println(tasklist)
}
在这里以一个定时报时任务作为例子:
type Task1 struct {}
func (this * Task1)Excute() {
timer := time.NewTicker(2 * time.Second)
for {
select {
case <-timer.C:
go func() {
Log(time.Now())
}()
}
}
}
func init() {
var task1 Task1
tasklist = make([]interface{} ,0 , 20)
AddTask(&task1)
for _, v := range tasklist {
v.(DoTask).Excute()
}
}
注意这里的定时任务要做成非阻塞的,否则整个Server都会卡在tasklist的第一个task的。。。









