我有一个调用方法的 goroutine,并在通道上传递返回值:
ch := make(chan int, 100)
go func(){
for {
ch <- do_stuff()
}
}()
我如何停止这样的协程?
原文由 Łukasz Gruner 发布,翻译遵循 CC BY-SA 4.0 许可协议
7 回答5.3k 阅读
6 回答6.9k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答2k 阅读✓ 已解决
1 回答3.4k 阅读
2 回答2.2k 阅读
1 回答2.1k 阅读
编辑: 在意识到您的问题是关于将值发送到 goroutine 中的 chan 之前,我匆忙写下了这个答案。下面的方法可以与上面建议的额外通道一起使用,或者使用你已经拥有的通道是双向的这一事实,你可以只使用一个……
如果您的 goroutine 仅用于处理来自 chan 的项目,您可以使用内置的“close”和通道的特殊接收表单。
也就是说,一旦你在 chan 上发送完项目,你就关闭它。然后在你的 goroutine 中,你会得到一个额外的参数给 receive 操作符,显示通道是否已经关闭。
这是一个完整的示例(等待组用于确保进程继续直到 goroutine 完成):