登录
首页 >  Golang >  Go问答

确保多个Go例程完成的方法:使用通道

来源:stackoverflow

时间:2024-02-19 23:36:21 494浏览 收藏

大家好,今天本人给大家带来文章《确保多个Go例程完成的方法:使用通道》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

问题内容

我正在与多个 go 例程异步执行事情。我传入用于处理的“线程”数量。

func refresh() {
    sign := make(chan int, len(allSets))
    for _, set := range allSets {
        i := int(set.GetId())
        if statement {
            // Update
            go UpdateKeywordSearcher(i, sign)
        }
    }

    // for this part, I wanna call some func after above all for..loop UpdateKeywordSearcher done
    // call anotherFunc()
} 
    
func UpdateKeywordSearcher(setid int, sign chan int) {
   // do some update logic
   sign <- setid
}

如上面写的代码,在多个go例程完成后如何调用另一个方法?我搜索了 select 但不知道到底应该写什么。


解决方案


正如其他人所建议的, sync.waitgroup 可能是这里使用的最明智的选择。也就是说,您可以通过读取信号通道的正确数量的项目来实现您想要实现的目标。

例如(我稍微简化了您的示例,但这应该能给您带来想法):

package main

func main() {
    allSets := []int{1,2,3,4,5,6}
    sign := make(chan int)
    
    for _, id := range allSets {
        go UpdateKeywordSearcher(id, sign)
    }
    
    for i := 0; i < len(allSets); i++ {
        <-sign
    }
    
    close(sign) // Close the channel now we are done with it
    
    println("Done")
}
    
func UpdateKeywordSearcher(setid int, sign chan int) {
    // do some update logic
    sign <- setid
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

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