问题内容
我是 GO 新手,我有一个关于使用通道信号停止 goroutine 的问题。
我有一个长期运行的 goroutine(超过 1000 个)和管理器来管理它:
func myThreadFunc(stop chan bool) { for { select { case在这种情况下,每次我调用 c
我尝试的唯一方法是像这样投射新的 goroutine:
var stopTest = func() { for _, c := range cancelChannelSlice { go func(c chan bool) { c我这是正确的方法吗?
正确答案
据我从您的问题中了解到,“您希望所有 goroutine 在 callClientTask() 的 1 次迭代中停止(不超过 30 秒)”并且工作线程同时运行而不会出现同步问题。
我重新组织了与等待组同时运行的代码。
示例代码:
package mainimport ( "log" "sync" "time")func worker(stop输出:
2023/10/26 10:40:44 Stopping thread2023/10/26 10:40:44 Stopping thread....2023/10/26 10:40:49 Stopping thread2023/10/26 10:40:49 Stopping thread登录后复制
编辑:
如果您想停止某些工作人员,则必须更新工作人员。以下代码包括具有“停止”和“停止”通道的工作人员以及启动/停止功能。
示例代码:
package mainimport ( "log" "sync" "time")type Worker struct { stop chan struct{} stopped chan struct{}}func NewWorker() *Worker { return &Worker{ stop: make(chan struct{}), stopped: make(chan struct{}), }}func (w *Worker) Start(wg *sync.WaitGroup) { wg.Add(1) go func() { defer wg.Done() for { select { case输出:
2023/10/26 12:51:26 Stopping thread2023/10/26 12:51:28 Stopping thread2023/10/26 12:51:30 Stopping thread....登录后复制
以上就是使用通道更快地关闭 goroutine的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2359873.html