Golang 并发处理任务,同时同步反馈处理任务的结果

2022-03-03  本文已影响0人  承诺一时的华丽
func connCmSoft(index int, result chan map[string]string, wg *sync.WaitGroup) {
    defer wg.Done()
    println(fmt.Sprintf("正在执行任务:%d", index))
    time.Sleep(time.Duration(index) * time.Second)
    result <- map[string]string{fmt.Sprintf("%d", index): "这是任务结果"}
}

func TestCMSoft(t *testing.T) {
    var (
        resultChan = make(chan map[string]string, 10)
        wg         = new(sync.WaitGroup)
    )

    for i := 0; i < 10; i++ {
        wg.Add(1)
        go connCmSoft(i, resultChan, wg)
    }

    wg.Wait()
    println("wg 任务组完成.")
    close(resultChan)
    for res := range resultChan {
        t.Log("任务反馈数据:", res)
    }
    println("任务全部执行完成")
}
=== RUN   TestCMSoft
正在执行任务:9
正在执行任务:0
正在执行任务:6
正在执行任务:1
正在执行任务:2
正在执行任务:7
正在执行任务:8
正在执行任务:5
正在执行任务:3
正在执行任务:4
wg 任务组完成.
    main_test.go:112: 任务反馈数据: map[0:这是任务结果]
    main_test.go:112: 任务反馈数据: map[1:这是任务结果]
    main_test.go:112: 任务反馈数据: map[2:这是任务结果]
    main_test.go:112: 任务反馈数据: map[3:这是任务结果]
    main_test.go:112: 任务反馈数据: map[4:这是任务结果]
    main_test.go:112: 任务反馈数据: map[5:这是任务结果]
    main_test.go:112: 任务反馈数据: map[6:这是任务结果]
    main_test.go:112: 任务反馈数据: map[7:这是任务结果]
    main_test.go:112: 任务反馈数据: map[8:这是任务结果]
    main_test.go:112: 任务反馈数据: map[9:这是任务结果]
任务全部执行完成
--- PASS: TestCMSoft (9.00s)
上一篇下一篇

猜你喜欢

热点阅读