浏览代码

make sure err is propagated

Darien Raymond 7 年之前
父节点
当前提交
8ed119e3f6
共有 1 个文件被更改,包括 12 次插入9 次删除
  1. 12 9
      common/task/task.go

+ 12 - 9
common/task/task.go

@@ -88,8 +88,8 @@ func OnFailure(task Task) ExecutionOption {
 	}
 }
 
-func Single(task Task, opts ExecutionOption) Task {
-	return Run(append([]ExecutionOption{Sequential(task)}, opts)...)
+func Single(task Task, opts ...ExecutionOption) Task {
+	return Run(append([]ExecutionOption{Sequential(task)}, opts...)...)
 }
 
 func Run(opts ...ExecutionOption) Task {
@@ -120,14 +120,17 @@ func executeParallel(ctx context.Context, tasks []Task) error {
 
 	for _, task := range tasks {
 		<-s.Wait()
-		go func(f func() error) {
-			if err := f(); err != nil {
-				select {
-				case done <- err:
-				default:
-				}
+		go func(f Task) {
+			err := f()
+			if err == nil {
+				s.Signal()
+				return
+			}
+
+			select {
+			case done <- err:
+			default:
 			}
-			s.Signal()
 		}(task)
 	}