- 使用一个循环遍历 goroutine 的列表,调用每个 goroutine 的 cancel() 函数来取消它。
- 将所有 goroutine 的取消通道绑定到一个 select 语句中,然后向这个 select 语句发送一个信号来取消所有 goroutine。
- 利用 context 包中的 WithCancel 函数创建一个上下文,并将它传递给每个 goroutine。当想要取消所有 goroutine 时,调用上下文的 cancel() 函数即可。
- 将所有 goroutine 的取消函数封装在一个函数中,然后使用 go 关键字启动这个函数来同时取消多个 goroutine。
- 使用一个带缓存的通道来存放所有 goroutine 的取消函数,并依次向这个通道发送所有函数。当想要取消所有 goroutine 时,循环取出通道中的函数,然后调用它们即可。
Go 如何 做到同时取消很多个协程
3 min read