【问题标题】:How to exit a function with infinite loop of channel如何退出具有通道无限循环的功能
【发布时间】:2022-11-17 16:43:21
【问题描述】:

我有这个函数可以监听 RabbitMQ 以使用消息。 在某些时候,我想停止收听并关闭频道并退出该功能。

func WaitForConfirm(expectedLen int){
    count := 0
    forever := make(chan bool)

    go func() {
        for i := 0; i < 5; i++ {
            count++
            if count == expectedLen {
                // HERE I WANT TO EXIT THE FUNCTION COMPLETELY
            }
        }
    }()

    <-forever
}

哦,顺便说一句,我这样称呼这个函数:

go WaitForConfirm(2)

那么,我怎样才能停止无限循环并退出函数呢?

【问题讨论】:

    标签: go


    【解决方案1】:

    实际上,您的代码中没有无限循环,只是 chan 阻塞了您的代码。

    您应该将值发送给 chan 以释放执行。

    这里的例子:https://go.dev/play/p/ujJjwBBsiP0

    【讨论】:

    • close(forever) 比发送到频道更安全,因为它不会阻塞并且频道上的所有接收者都会收到信号
    • 是的,这是一个很好的观点
    猜你喜欢
    • 2016-11-07
    • 2020-06-06
    • 2017-01-20
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    相关资源
    最近更新 更多