diff --git a/common/utils/sqrt_test.go b/common/utils/sqrt_test.go index b95da409..315b33a1 100644 --- a/common/utils/sqrt_test.go +++ b/common/utils/sqrt_test.go @@ -94,11 +94,16 @@ func BenchmarkFastSqrtInt(b *testing.B) { func Test_event(b *testing.T) { - tt := make(map[int]*bus.Listener[*Task], 3) topic := bus.NewTopic[*Task]() //直接注册到用户 for i := 0; i < 1; i++ { - t := topic.Sub(func(v *Task) { //注册里程碑 - fmt.Println(v.id) + isdone := false + t := topic.Sub(func(v *Task) { //用户初始化时注册里程碑 + if v.done { //如果任务完成 + isdone = true + fmt.Println(v.id, "任务完成") + return + } + if v.cfunc != nil { v.cont = v.cfunc(v.cont) //增加计数 } @@ -106,25 +111,27 @@ func Test_event(b *testing.T) { if v.cont > 0 { //如果计数达到,标记任务完成 v.done = true } - fmt.Println("当前任务计数", v.cont, "是否完成", v.done) - }) - tt[i] = t - } - topic.Pub(&Task{id: 1, cfunc: func(t uint32) uint32 { //满足任务1后推定 + fmt.Println(v.id, "当前任务计数", v.cont, "是否完成", v.done) - fmt.Println("当前任务计数", t) + }) + if isdone { //如果任务完成,取消注册 + t.Cancel() + } + + } + task1 := &Task{id: 1, cfunc: func(t uint32) uint32 { //满足任务1后推定 + + fmt.Println(1, "当前任务计数", t) //实现自定义逻辑 //增加用户计数 //增加服务器总计数 return t + 1 - }}) + }} + topic.Pub(task1) topic.Pub(&Task{id: 2, done: true}) - for _, v := range tt { - v.Cancel() - } - topic.Pub(&Task{id: 1}) //发送事件 + topic.Pub(task1) //发送事件 }