-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathtaskgroup_example_test.go
120 lines (107 loc) · 3.74 KB
/
taskgroup_example_test.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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package taskgroup_test
import (
"fmt"
"time"
"github.com/mlee-msl/taskgroup"
)
// ---------------------------------------------------
// ----------------------使用样例----------------------
// ---------------------------------------------------
// Typical 展示了典型的使用案例,包括,多任务创建、任务执行、结果收集,错误处理等
func ExampleTaskGroup_typical() {
defer func() func() {
start := time.Now()
return func() {
_ = fmt.Sprintf("elapsed: %d", time.Since(start))
}
}()()
type TaskType = uint32
const (
_ TaskType = iota
task1
task2
task3
)
tasks := []*taskgroup.Task{
taskgroup.NewTask(uint32(task1), task1ReturnFailWrapper(uint32(task1), false), false),
taskgroup.NewTask(uint32(task2), task2ReturnSuccessWrapper(uint32(task2), false), true),
taskgroup.NewTask(uint32(task3), task3ReturnFailWrapper(uint32(task3), false), false),
}
taskResults, err := taskgroup.NewTaskGroup(taskgroup.WithWorkerNums(uint32(len(tasks)))).AddTask(tasks...).Run()
if err != nil {
fmt.Printf("err: %+v\n", err)
return
}
for fno, result := range taskResults {
fmt.Printf("FNO: %d, RESULT: %v , STATUS: %v\n", fno, result.Result(), result.Error())
}
// Unordered output:
// FNO: 3, RESULT: TASK3: The data is 928 , STATUS: fno: 3, TASK3 err
// FNO: 2, RESULT: {1112 mlee} , STATUS: <nil>
// FNO: 1, RESULT: 1127 , STATUS: fno: 1, TASK1 err
}
// Default 展示了默认配置的使用案例,包括,多任务创建、任务执行、结果收集,错误处理等
func ExampleTaskGroup_default() {
tasks := []*taskgroup.Task{
taskgroup.NewTask(1, task1ReturnFailWrapper(1, false), false),
taskgroup.NewTask(2, task2ReturnSuccessWrapper(2, false), true),
taskgroup.NewTask(3, task3ReturnFailWrapper(3, false), true),
}
taskResults, err := new(taskgroup.TaskGroup).AddTask(tasks...).Run()
if err != nil {
fmt.Printf("err: %+v\n", err)
return
}
for fno, result := range taskResults {
fmt.Printf("FNO: %d, RESULT: %v , STATUS: %v\n", fno, result.Result(), result.Error())
}
// Output:
// err: fno: 3, TASK3 err
}
// JustNotBad 展示了非最佳的使用案例,包括,多任务创建、任务执行、结果收集,错误处理等
func ExampleTaskGroup_justNotBad() {
tasks := []*taskgroup.Task{
taskgroup.NewTask(1, task1ReturnFailWrapper(1, false), false),
taskgroup.NewTask(2, task2ReturnSuccessWrapper(2, false), true),
taskgroup.NewTask(3, task3ReturnFailWrapper(2, false), false),
nil,
nil,
}
taskResults, err := taskgroup.NewTaskGroup(nil).AddTask(tasks...).Run()
if err != nil {
fmt.Printf("err: %+v\n", err)
return
}
for fno, result := range taskResults {
fmt.Printf("FNO: %d, RESULT: %v , STATUS: %v\n", fno, result.Result(), result.Error())
}
// Unordered output:
// FNO: 3, RESULT: TASK3: The data is 928 , STATUS: fno: 2, TASK3 err
// FNO: 1, RESULT: 1127 , STATUS: fno: 1, TASK1 err
// FNO: 2, RESULT: {1112 mlee} , STATUS: <nil>
}
// Abnormal 展示了异常的使用案例,包括,多任务创建、任务执行、结果收集,错误处理等
func ExampleTaskGroup_abnormal() {
defer func() {
if r := recover(); r != nil {
fmt.Printf("err: %+v\n", r)
}
}()
tasks := []*taskgroup.Task{
taskgroup.NewTask(1, task1ReturnFailWrapper(1, false), true),
taskgroup.NewTask(2, task2ReturnSuccessWrapper(2, false), true),
taskgroup.NewTask(2, task3ReturnFailWrapper(3, false), true),
nil,
nil,
}
taskResults, err := taskgroup.NewTaskGroup(taskgroup.WithWorkerNums(uint32(len(tasks)))).AddTask(tasks...).Run()
if err != nil {
fmt.Printf("err: %+v\n", err)
return
}
for fno, result := range taskResults {
fmt.Printf("FNO: %d, RESULT: %v , STATUS: %v\n", fno, result.Result(), result.Error())
}
// Output:
// err: AddTask: Already have the same Task 2
}