task.go 672 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package task
  2. import (
  3. "context"
  4. "gd_crontab/common.in/utils"
  5. "fmt"
  6. "time"
  7. )
  8. type Task func() error
  9. func Do(ctx context.Context, tasks ...Task) (returnErr error) {
  10. utils.GC()
  11. // 开始时间
  12. startTime := uint64(time.Now().UnixNano())
  13. // 抓异常代码
  14. defer func() {
  15. status := "SUCCESS"
  16. if r := recover(); r != nil {
  17. if e, ok := r.(error); ok {
  18. returnErr = e
  19. } else {
  20. returnErr = fmt.Errorf("%+v", r)
  21. }
  22. }
  23. if returnErr != nil {
  24. status = "FAIL"
  25. }
  26. printAccessLog(ctx, startTime, status)
  27. }()
  28. for _, task := range tasks {
  29. if task != nil {
  30. if err := task(); err != nil {
  31. returnErr = err
  32. return
  33. }
  34. }
  35. }
  36. return
  37. }