-
Notifications
You must be signed in to change notification settings - Fork 1
/
ec_await.go
55 lines (49 loc) · 1.35 KB
/
ec_await.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package framework
import (
"context"
"git.golaxy.org/core"
"git.golaxy.org/core/runtime"
"git.golaxy.org/core/utils/async"
"git.golaxy.org/core/utils/generic"
)
// AwaitDirector 异步等待分发器
type AwaitDirector struct {
iec iEC
director core.AwaitDirector
}
// Any 异步等待任意一个结果返回
func (ad AwaitDirector) Any(fun generic.ActionVar1[async.Ret, any], va ...any) {
ad.director.Any(func(_ runtime.Context, ret async.Ret, a ...any) {
if !ad.iec.IsAlive() {
return
}
fun.Exec(ret, a...)
}, va...)
}
// AnyOK 异步等待任意一个结果成功返回
func (ad AwaitDirector) AnyOK(fun generic.ActionVar1[async.Ret, any], va ...any) {
ad.director.AnyOK(func(_ runtime.Context, ret async.Ret, a ...any) {
if !ad.iec.IsAlive() {
return
}
fun.Exec(ret, a...)
}, va...)
}
// All 异步等待所有结果返回
func (ad AwaitDirector) All(fun generic.ActionVar1[[]async.Ret, any], va ...any) {
ad.director.All(func(_ runtime.Context, rets []async.Ret, a ...any) {
if !ad.iec.IsAlive() {
return
}
fun.Exec(rets, a...)
}, va...)
}
// Pipe 异步等待管道返回
func (ad AwaitDirector) Pipe(ctx context.Context, fun generic.ActionVar1[async.Ret, any], va ...any) {
ad.director.Pipe(ctx, func(_ runtime.Context, ret async.Ret, a ...any) {
if !ad.iec.IsAlive() {
return
}
fun.Exec(ret, a...)
}, va...)
}