Go 多协程记录执行结果

Golang
354
0
0
2022-06-14
标签   Golang进阶
package main

import (
    "fmt" 
    "sync" 
    "time"
)
//模拟一个耗时的任务
func job(worker int)int{
    time.Sleep(time.Millisecond*500)
    return worker
}
func main(){
    //记录开始时间
    start:=time.Now()
    wg:=sync.WaitGroup{}
    //初始化channel用于记录每次任务的工作结果
    reciveChan :=make(chan int)
    //循环执行5次任务 
    for i:=0;i<5;i++{
        wg.Add(1)
        go func(par int) {
            //将任务结果存在channel中
            reciveChan <- job(par)
            wg.Done()
        }(i)
    }
    go func() {
        //等待所有任务执行结束后关闭channel,可以使后续遍历channel的循环退出 
        defer close(reciveChan)
        wg.Wait()
    }()
    //遍历输出channel中的内容 
    for worker :=range(reciveChan){
        fmt.Println(worker)
    }
    //计算从开始时间到现在消耗的时间
    end:=time.Since(start)
    fmt.Println("这批任务总共耗时为:",end.String())
}