登录
首页 >  Golang >  Go问答

等待缓冲通道为空时停止 Golang Worker

来源:stackoverflow

时间:2024-03-18 09:51:29 197浏览 收藏

在 Go 语言中,使用缓冲通道读取数据时,如果缓冲通道不为空,停止通道可能会被执行,导致工作线程停止。为了解决这个问题,可以使用非缓冲通道,但如果希望使用缓冲通道,可以对选择语句进行排序,使其优先执行缓冲通道。

问题内容

我正在尝试创建一个持续从缓冲通道和停止通道读取数据的工作线程。

由于 select 语句会随机选择两个通道是否已就绪,因此停止通道将被执行。有没有什么方法可以对选择进行排序而不是随机排序,以便如果我的缓冲通道返回一个值就执行该代码。

使用非缓冲通道可以解决这个问题,但是使用缓冲通道有什么办法吗?

https://play.golang.org/p/ZuMEkp6sJgv


解决方案


发布的代码可以简化为:

var channel = make(chan int)
var wg sync.WaitGroup

var limit int = 50000

func main() {
    wg.Add(1)
    go worker()

    for i := 0; i < limit; i++ {
        channel <- i
    }
    close(channel)
    wg.Wait()
}

func worker() {
    defer wg.Done()
    for i := range channel {
        log.Println(i)
    }
}

本篇关于《等待缓冲通道为空时停止 Golang Worker》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>