sync.WaitGroup 不等待

可能是我看不到明显的东西,我做错了什么:


func printSize (listOfUrls []string){

    var wg sync.WaitGroup

    wg.Add(len(listOfUrl))

    for _, myurl := range(listOfUrls){

        go func(){

               body := getUrlBody(myurl)

               fmt.Println(len(body))

               wg.Done()

           }()    

    } 

    wg.Wait()

}

如果我删除 wg 并继续,我会正确收到每个 url 正文的大小。如果我像上面那样做,它几乎立即打印零。getUrlBody() 有时需要几分钟的时间来执行。


回答评论:我也尝试过这种方式,可以肯定的是,它表现出相同的行为。我发现错误出在 getUrlBody 和 main() 函数中...


func printSize(listOfUrls []string) {

    var wg sync.WaitGroup

    wg.Add(len(listOfUrls))

        for _, myurl := range listOfUrls {

          go f(myurl, &wg)

        }

    wg.Wait()

}


func f(myurl string, wg *sync.WaitGroup) {

    body := getUrlBody(myurl)

    fmt.Println(len(body))

    wg.Done()

 }


慕后森
浏览 182回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go