【发布时间】:2014-04-05 20:48:08
【问题描述】:
我正在尝试同时运行多个任务并返回结果或错误。
//data channels
ch := make(chan int)
ch2 := make(chan int)
ch2 := make(chan int)
//error channels
errCh := make(chan error)
errCh2 := make(chan error)
errCh3 := make(chan error)
//functions
go taskF(ch, errCh)
go taskF2(ch2, errCh2)
go taskF3(ch3, errCh3)
然后我开始检查每个错误。如果有任何错误我们打印它,否则我们打印每个任务的结果
err := <-errCh
if err != nil{
print('we have an error ')
return
}
err2 := <-errCh2
if err2 != nil{
print('we have an error 2')
return
}
err3 := <-errCh3
if err3!= nil{
print('we have an error 3')
return
}
如果没有错误,我会收集每个通道返回的值
task := <-ch
task2 := <-ch2
task3 := <-ch3
print("task %v task2 %v task3 %v", task, task2, task3)
我想知道我是否做得对。我担心代码很冗长。我正在考虑使用缓冲通道来检测错误,但我不知道如何检查所有错误。我认为以某种方式同步 goroutine 中的错误也很好,这样如果一个 goroutine 上出现错误,其他 goroutine 就会停止,但我不知道有什么方法可以解除阻塞。
【问题讨论】:
标签: concurrency go