Golang 并发处理任务,同时同步反馈处理任务的结果
2022-03-03 本文已影响0人
承诺一时的华丽
- Demo示例:
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)