美文网首页
golang 多协程执行通过channel收集结果

golang 多协程执行通过channel收集结果

作者: 我爱张智容 | 来源:发表于2021-07-02 16:13 被阅读0次
    package main
    import (
        "fmt"
        "sync"
        "time"
    )
    func job(index int) int {
        time.Sleep(time.Millisecond * 500)
        //fmt.Println(index)
        return index
    }
    func main() {
        start := time.Now()
        num := 5
        res := make(chan int)
        wg := sync.WaitGroup{}
        for i := 0; i < num; i++ {
            wg.Add(1)
            go func(i int) {
                defer wg.Done()
                res <- job(i)
            }(i)
        }
        //等待所有goroutine执行完之后再关闭通道 defer方式关闭
        go func() {
            defer close(res)
            wg.Wait()
        }()
        for v := range res {
            fmt.Println("v:", v)
        }
        end := time.Since(start)
        fmt.Println(" 耗时 : ", end.String())
    }
    
    

    相关文章

      网友评论

          本文标题:golang 多协程执行通过channel收集结果

          本文链接:https://www.haomeiwen.com/subject/bityultx.html