go 开发 寻求大神帮助

lemonsds · · 387 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

go怎么实现延迟任务执行 main函数执行后 直接退出了  在main函数里面是有select{}可以实现执行完后在退出 ,但是实际项目应用中肯定不能这样做,例如执行一个每20秒执行一个任务 应该怎么做

func main() {
     //go timer1()
   //timer2()
   for i :=1; i <10 ; i++ {
      task :=&Task{i+1,"a",""}
      task.Start()
   }
}
type Task struct {
   delay int
   key   string
   data  string
}

func  NewTask(delay int,key ,data string)  *Task {
   task :=&Task{
      delay:delay,
      key:key,
      data:data,
   }
   return task
}
func (task * Task) Start()  {
     go task.run()
}
func (task * Task) run()  {
   fmt.Println("开始执行")
   second :=time.Duration(task.delay)
   timer :=time.NewTicker(second * time.Second)
   //val:=make(chan string)
   for {
      select {
         case <-timer.C:
            /*fmt.Println("减去之前:"+string(task.delay))
            if(task.delay >0){
               task.delay--
               fmt.Println(task.delay)
            }
            if(task.delay == 0){
               fmt.Println("时间到执行回调")
               Httppost(task.data)
               timer.Stop()
            }*/
            fmt.Println("时间到执行回调")
            Httppost(task.data)
            timer.Stop()
      }
   }
}

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:1006366459

387 次点击  
加入收藏 微博
2 回复  |  直到 2018-08-03 10:03:18
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传