我们应该停止这种股票行情吗?

时间:2018-08-29 04:33:16

标签: go timer cron goroutine

我有一个时间行情记录器,它将在时间间隔(例如,每5分钟,10分钟)内执行一个功能。我在goroutine中创建此时间行情记录器。我听说即使应用程序停止了,这种股票也会泄漏内存。只要应用程序运行,此行情记录器就会一直运行。它应该停止吗?如何正确停止?这是我的实现:

go func() {
    for range time.Tick(5 * time.Minute) {
        ExecuteFunctionA()
    }
}()

像这样的时间行情记录器的正确实现方法是什么?

2 个答案:

答案 0 :(得分:3)

您可以使用渠道作为中介来正确停止股票行情。

通常,我按照以下步骤进行操作:

var stopChan chan bool = make(chan bool)

func Stop() {
    stopChan <- true
}

func Run() {
    go func() {
       ticker := time.NewTicker(5 * time.Minute)
       for {
           select {
               case <- c.stopChan:
                   ticker.Stop()
                   return
               case <- ticker.C:
                   ExecuteFunctionA()
           } 
       }
    }()
}

并且您可以在想要安全停止股票行情时调用Stop函数。

答案 1 :(得分:1)

如果“应用已停止”,则不会泄漏任何内容。 warning in the documentation是指以下事实:创建后,垃圾收集器将无法回收该通道(time.Tick()初始化并返回chan),即使您决定{ {1}}个循环中的{1}}个。 根据您对问题的描述,这对您来说应该不是问题,因为您希望代码运行只要应用程序运行即可。但是,如果您另有决定,则可以使用以下替代方法:

break