利用 context.WithCancel()来终止协程,但存在一个问题:cancel()执行后,必须等 for 循环执行完毕 goroutine 才退出。
for { select { case <-Ctx.Done(): return default: fr i := 0; i < 100; i++ { // 业务逻辑 } } } 需求为:cancel()后协程立马退出不再执行后面的循环。
目前我的解决方法:单独起一个协程用来监听退出信号,然后通过全局变量通知业务逻辑循环退出。
flag := false go func() { for { select { case <-Ctx.Done(): flag = true return } }() for i:=0; i < 100; i++ { if flag { return } // 业务逻辑 } 请问最佳实践应该是如何退出?
