Skip to content

Commit 0a020b3

Browse files
committed
feat: move result channel in all function.
1 parent f4e9c37 commit 0a020b3

File tree

1 file changed

+9
-16
lines changed

1 file changed

+9
-16
lines changed

all.go

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,10 @@ func all(parent context.Context, funcs ...func(context.Context) error) error {
3232
}
3333

3434
ctx, canFunc := context.WithCancel(parent)
35-
errCh := make(chan error)
36-
retCh := make(chan struct{}, len(funcs))
37-
3835
defer canFunc()
36+
37+
errCh := make(chan error)
3938
defer close(errCh)
40-
defer close(retCh)
4139

4240
for i := 0; i < len(funcs); i++ {
4341
fn := funcs[i]
@@ -53,30 +51,25 @@ func all(parent context.Context, funcs ...func(context.Context) error) error {
5351
case <-ctx.Done():
5452
return
5553
default:
56-
if err != nil {
57-
errCh <- err
58-
} else {
59-
retCh <- struct{}{}
60-
}
54+
errCh <- err
6155
}
6256
}()
6357
}
6458

6559
finished := 0
66-
for {
60+
for finished < len(funcs) {
6761
select {
6862
case <-parent.Done():
6963
return errors.New("context canceled")
7064
case err := <-errCh:
71-
return err
72-
case <-retCh:
65+
if err != nil {
66+
return err
67+
}
7368
finished++
7469
}
75-
76-
if finished == len(funcs) {
77-
return nil
78-
}
7970
}
71+
72+
return nil
8073
}
8174

8275
// AllCompleted executes the functions asynchronously until all functions have been finished. It

0 commit comments

Comments
 (0)