Golang Stop Worker 但等待缓冲 channel 为空

标签 go

我正在尝试创建一个不断从缓冲 channel 和停止 channel 读取的工作人员。

由于如果两个 channel 都准备好,则 select 语句会随机选择停止 channel 。有没有办法对选择进行排序而不是随机排序,以便如果我的缓冲 channel 返回一个值,则执行该代码。

使用无缓冲 channel 可以解决这个问题,但是有什么方法可以使用缓冲 channel 吗?

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 Stop Worker 但等待缓冲 channel 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61017506/

相关文章:

go - 在 gin 中使用 go-assets 的例子

rest - 将音频/视频文件传递给 API

go - 无法使用自制软件安装编译在 OS X 上导入 net/http 的程序

戈兰 + CORS。全局设置不知何故?

go - 在 Go 中使用 stdlib 中未导出的函数/类型

reflection - 使用反射包比较指针值

go - 创建常量类型并限制类型的值

go - 将 JSON 公钥/私钥对转换为 rsa.PrivateKey 和 rsa.PublicKey

go - 静态检查 Nil 接口(interface)值?

testing - 只在测试文件中引用的go测试代码会被编译成二进制文件吗?