一尘不染

Golang的股票行情停止行为

go

如果我在一个自动收录器频道范围内通话并调用stop(),则该频道已停止但未关闭。

在此示例中:

package main

import (
    "time"
    "log"
)

func main() {
    ticker := time.NewTicker(1 * time.Second)
    go func(){
        for _ = range ticker.C {
            log.Println("tick")
        }
        log.Println("stopped")
    }()
    time.Sleep(3 * time.Second)
    log.Println("stopping ticker")
    ticker.Stop()
    time.Sleep(3 * time.Second)
}

运行产生:

2013/07/22 14:26:53 tick
2013/07/22 14:26:54 tick
2013/07/22 14:26:55 tick
2013/07/22 14:26:55 stopping ticker

因此,goroutine永远不会退出。有没有更好的方法来处理这种情况?我应该担心goroutine永远不会退出吗?


阅读 206

收藏
2020-07-02

共1个答案

一尘不染

在第二个频道上发出“完成”信号,然后在代码行情清单和已完成的频道之间选择您的goroutine。

根据您真正想做的事情,可能存在更好的解决方案,但这很难从简化的演示代码中看出来。

2020-07-02