我有一个调用函数的 goroutine,并且有一个特殊参数,我想启动或停止这个 goroutine。我的问题是这段代码永远不会停止我的 goroutine,它每次都会创建一个新作业。
quit := make(chan bool)
run := make(chan bool)
go func() {
for {
select {
case <-quit:
close(run)
case <-run:
myFunc(c)
default:
}
}
}()
if x == true {
quit <- true
} else {
run <- true
}
我该如何停止我的例行公事?
当您关闭run
渠道,case <-run
将始终触发:监听关闭的通道立即返回零值。
如果你想停止 goroutine,你应该在获取到之后返回<-quit
signal.
作为旁注,您的default:
子句使 for 循环主动工作,您应该摆脱它(您仍然会在两个频道上收听)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)