Go 多協程記錄執行結果

Yark發表於2021-08-25
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())
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結
:kissing_closed_eyes: 我愛小硯 乀(ˉεˉ乀)

相關文章