79 lines
1.9 KiB
Go
79 lines
1.9 KiB
Go
package timeslice
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"golang.org/x/sync/errgroup"
|
|
"math/rand"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func ProcessTasks() error {
|
|
eg := new(errgroup.Group)
|
|
eg.SetLimit(5)
|
|
|
|
for i := 0; i < 5; i++ {
|
|
eg.Go(func() error {
|
|
// 任务逻辑...
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
return fmt.Errorf("任务失败")
|
|
})
|
|
}
|
|
|
|
return eg.Wait() // 仅返回第一个错误
|
|
}
|
|
|
|
func TestNewManager(t *testing.T) {
|
|
|
|
// 解析起始时间和结束时间
|
|
start, err := time.Parse(time.DateTime, "2023-01-01 00:00:00")
|
|
if err != nil {
|
|
t.Fatalf("查询失败: %v", err)
|
|
return
|
|
}
|
|
|
|
//end, err := time.Parse(time.DateTime, "2023-01-31 02:00:01")
|
|
end, err := time.Parse(time.DateTime, "2023-01-02 02:00:01")
|
|
if err != nil {
|
|
t.Fatalf("查询失败: %v", err)
|
|
return
|
|
}
|
|
|
|
var results []string
|
|
callback := func(ctx context.Context, req *Task) error {
|
|
// 模拟任务执行,休眠随机时间
|
|
time.Sleep(time.Duration(rand.Intn(5)) * time.Second)
|
|
// 生成任务执行结果
|
|
result := fmt.Sprintf("任务批次 %d-%s: %s 至 %s 处理完成", req.TaskID, req.ProductNo, req.CurrentStartTime.Format(time.DateTime), req.CurrentEndTime.Format(time.DateTime))
|
|
results = append(results, result)
|
|
//return nil
|
|
return fmt.Errorf("任务执行失败:%d-%s,时间%s-%s", req.TaskID, req.ProductNo, req.CurrentStartTime.Format(time.DateTime), req.CurrentEndTime.Format(time.DateTime))
|
|
}
|
|
|
|
startTime := time.Now()
|
|
startStr := time.Now().String()
|
|
|
|
srv := NewManager(callback)
|
|
taskCount, err := srv.Run(context.Background(), &Manager{
|
|
StartTime: start,
|
|
EndTime: end,
|
|
ProductNo: "123456",
|
|
GoNum: 2,
|
|
})
|
|
|
|
// 输出结果
|
|
fmt.Printf("总任务数:%d\n", taskCount)
|
|
for _, result := range results {
|
|
fmt.Printf("%v\n", result)
|
|
}
|
|
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
endTime := time.Now()
|
|
fmt.Printf("处理耗时:%s,开始处理时间:%s,结束时间%s", startStr, endTime.Sub(startTime).String(), endTime.String())
|
|
}
|