singletask.go 429 B

12345678910111213141516171819202122232425262728293031
  1. // Author: NiuJiuRu
  2. // Email: niujiuru@qq.com
  3. package SingleTask
  4. import "sync/atomic"
  5. type SingleTask struct {
  6. running atomic.Bool
  7. }
  8. func (t *SingleTask) Run(f func(), async bool) {
  9. if !t.running.CompareAndSwap(false, true) {
  10. return
  11. }
  12. runFunc := func() {
  13. defer t.running.Store(false)
  14. f()
  15. }
  16. if async {
  17. go runFunc()
  18. } else {
  19. runFunc()
  20. }
  21. }
  22. func (t *SingleTask) IsRunning() bool {
  23. return t.running.Load()
  24. }