initial import
This commit is contained in:
32
core/executors/lessexecutor.go
Normal file
32
core/executors/lessexecutor.go
Normal file
@@ -0,0 +1,32 @@
|
||||
package executors
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"zero/core/syncx"
|
||||
"zero/core/timex"
|
||||
)
|
||||
|
||||
type LessExecutor struct {
|
||||
threshold time.Duration
|
||||
lastTime *syncx.AtomicDuration
|
||||
}
|
||||
|
||||
func NewLessExecutor(threshold time.Duration) *LessExecutor {
|
||||
return &LessExecutor{
|
||||
threshold: threshold,
|
||||
lastTime: syncx.NewAtomicDuration(),
|
||||
}
|
||||
}
|
||||
|
||||
func (le *LessExecutor) DoOrDiscard(execute func()) bool {
|
||||
now := timex.Now()
|
||||
lastTime := le.lastTime.Load()
|
||||
if lastTime == 0 || lastTime+le.threshold < now {
|
||||
le.lastTime.Set(now)
|
||||
execute()
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
Reference in New Issue
Block a user