Concurrency 如何处理goroutines中的错误?
我正在尝试同时运行多个任务并返回结果或错误Concurrency 如何处理goroutines中的错误?,concurrency,go,Concurrency,Go,我正在尝试同时运行多个任务并返回结果或错误 //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
//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
}
err:=考虑只使用一个通道进行同步,并让该通道包含错误状态(请参见结果结构)。无论何时收到结果,请确保错误状态为零。在任务结构中包装每个任务将允许您在每个任务返回错误时调用Stop。根据具体的应用程序,可能有更好的方法来处理此问题,例如WaitGroups()
类型结果结构{
Val int
错误
}
类型任务结构{
阻止布尔
}
函数(t*任务)停止(){
t、 停止=真
}
func(t*任务)运行(doneChan chan结果){
//这里的长期运行任务
//定期检查t
多尼坎
task := <-ch
task2 := <-ch2
task3 := <-ch3
print("task %v task2 %v task3 %v", task, task2, task3)
type Result struct {
Val int
Err error
}
type Task struct {
stopped bool
}
func (t *Task) Stop() {
t.stopped = true
}
func (t *Task) Run(doneChan chan Result) {
// long-running task here
// periodically check t.stopped
doneChan <- Result{Val: ..., Err: nil}
}