回答

收藏

有没有办法在 Go 中执行重复的后台任务

技术问答 技术问答 286 人阅读 | 0 人回复 | 2023-09-12

没有办法Go 执行重复的后台任务?我在想类似的事情Timer.schedule(task,delay,period)Java我知道我可以用 goroutine and 做到这一点Time.sleep(),但我想要一些很容易停止的东西。
- y5 f' [. |& d! v% o这是我得到的,但对我来说看起来很丑。有没有更干净/更好的方法?
  t; Y0 c% E+ f' m4 ]7 S
    func oneWay()      var f func()    var t *time.Timer    f = func ()          fmt.Println("doing stuff")        t = time.AfterFunc(time.Duration(5) * time.Second,f)   }    t = time.AfterFunc(time.Duration(5) * time.Second,f)    defer t.Stop()    //simulate doing stuff    time.Sleep(time.Minute)}  ]/ m* A* T! e- j# ]7 U1 ^# F
               
  v  u, j) W' p    解决方案:                                                                7 b% r) \7 ], I! r: y
                                                                该函数time.NewTicker创建一个发送周期性消息的渠道,并提供一种停止它的方法。这样使用它(未经测试):) d& K7 S. w+ [! g: S2 J
[code]ticker := time.NewTicker(5 * time.Second)quit := make(chan struct{})go func()      for          select           case 您可以关闭并停止工作器quit通道:close(quit)。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则