JCC-CSScheduler/schedulerMiddleware/internal/manager/task/task.go

59 lines
1.1 KiB
Go

package jobTask
import (
"fmt"
"gitlink.org.cn/cloudream/common/pkgs/async"
//"gitlink.org.cn/cloudream/common/pkgs/async"
//"gitlink.org.cn/cloudream/common/utils/sync2"
"gitlink.org.cn/cloudream/common/pkgs/future"
"gitlink.org.cn/cloudream/common/pkgs/logger"
"math/rand"
"time"
)
type JobTask[T any] struct {
id string
taskChan *async.UnboundChannel[T]
}
func NewJobTask[T any]() *JobTask[T] {
return &JobTask[T]{
id: getTaskID(),
taskChan: async.NewUnboundChannel[T](),
}
}
func getTaskID() string {
now := time.Now()
nano := now.UnixNano()
rand.Seed(time.Now().UnixNano())
randomNumber := rand.Intn(9000) + 1000 // 生成1000到9999之间的随机数
taskID := fmt.Sprintf("id_%d_%d", nano, randomNumber)
return taskID
}
func (c *JobTask[T]) Receive() future.Future1[T] {
return c.taskChan.Receive()
}
func (c *JobTask[T]) Send(info T) {
err := c.taskChan.Send(info)
if err != nil {
logger.Error(err.Error())
return
}
//logger.Info("send http")
}
func (c *JobTask[T]) Chan() *async.UnboundChannel[T] {
return c.taskChan
}
func (c *JobTask[T]) ID() string {
return c.id
}