Skip to content

Commit 7eabf5a

Browse files
author
Haitao Chen
committed
update after_both
1 parent 6388b30 commit 7eabf5a

File tree

2 files changed

+94
-1
lines changed

2 files changed

+94
-1
lines changed

after_all.go

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package asynctask
2+
3+
import "context"
4+
5+
// AfterAll3Func is a function that has 3 input.
6+
type AfterAll3Func[T, S, R, Q any] func(context.Context, *T, *S, *R) (*Q, error)
7+
8+
// AfterAll4Func is a function that has 4 input.
9+
type AfterAll4Func[T, S, R, Q, P any] func(context.Context, *T, *S, *R, *Q) (*P, error)
10+
11+
// AfterAll5Func is a function that has 5 input.
12+
type AfterAll5Func[T, S, R, Q, P, O any] func(context.Context, *T, *S, *R, *Q, *P) (*O, error)
13+
14+
// AfterAll3 runs the function after both 3 input task finished, and will be feed with result from 3 input task.
15+
func AfterAll3[T, S, R, Q any](ctx context.Context, tskT *Task[T], tskS *Task[S], tskR *Task[R], next AfterAll3Func[T, S, R, Q]) *Task[Q] {
16+
return Start(ctx, func(fCtx context.Context) (*Q, error) {
17+
t, err := tskT.Result(fCtx)
18+
if err != nil {
19+
return nil, err
20+
}
21+
22+
s, err := tskS.Result(fCtx)
23+
if err != nil {
24+
return nil, err
25+
}
26+
27+
r, err := tskR.Result(fCtx)
28+
if err != nil {
29+
return nil, err
30+
}
31+
32+
return next(fCtx, t, s, r)
33+
})
34+
}
35+
36+
// AfterAll4 runs the function after both 4 input task finished, and will be feed with result from 4 input task.
37+
func AfterAll4[T, S, R, Q, P any](ctx context.Context, tskT *Task[T], tskS *Task[S], tskR *Task[R], tskQ *Task[Q], next AfterAll4Func[T, S, R, Q, P]) *Task[P] {
38+
return Start(ctx, func(fCtx context.Context) (*P, error) {
39+
t, err := tskT.Result(fCtx)
40+
if err != nil {
41+
return nil, err
42+
}
43+
44+
s, err := tskS.Result(fCtx)
45+
if err != nil {
46+
return nil, err
47+
}
48+
49+
r, err := tskR.Result(fCtx)
50+
if err != nil {
51+
return nil, err
52+
}
53+
54+
q, err := tskQ.Result(fCtx)
55+
if err != nil {
56+
return nil, err
57+
}
58+
59+
return next(fCtx, t, s, r, q)
60+
})
61+
}
62+
63+
// AfterAll5 runs the function after both 5 input task finished, and will be feed with result from 5 input task.
64+
func AfterAll5[T, S, R, Q, P, O any](ctx context.Context, tskT *Task[T], tskS *Task[S], tskR *Task[R], tskQ *Task[Q], tskP *Task[P], next AfterAll5Func[T, S, R, Q, P, O]) *Task[O] {
65+
return Start(ctx, func(fCtx context.Context) (*O, error) {
66+
t, err := tskT.Result(fCtx)
67+
if err != nil {
68+
return nil, err
69+
}
70+
71+
s, err := tskS.Result(fCtx)
72+
if err != nil {
73+
return nil, err
74+
}
75+
76+
r, err := tskR.Result(fCtx)
77+
if err != nil {
78+
return nil, err
79+
}
80+
81+
q, err := tskQ.Result(fCtx)
82+
if err != nil {
83+
return nil, err
84+
}
85+
86+
p, err := tskP.Result(fCtx)
87+
if err != nil {
88+
return nil, err
89+
}
90+
91+
return next(fCtx, t, s, r, q, p)
92+
})
93+
}

after_both.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package asynctask
22

33
import "context"
44

5-
// AfterBoth is a function that has 2 input.
5+
// AfterBothFunc is a function that has 2 input.
66
type AfterBothFunc[T, S, R any] func(context.Context, *T, *S) (*R, error)
77

88
// AfterBoth runs the function after both 2 input task finished, and will be feed with result from 2 input task.

0 commit comments

Comments
 (0)