如果我在一个自动收录器频道范围内通话并调用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永远不会退出吗?
在第二个频道上发出“完成”信号,然后在代码行情清单和已完成的频道之间选择您的goroutine。
根据您真正想做的事情,可能存在更好的解决方案,但这很难从简化的演示代码中看出来。