项目作者: mhtshhp

项目描述 :
Multi task for golang
高级语言: Go
项目地址: git://github.com/mhtshhp/multitask.git
创建时间: 2021-01-29T07:47:50Z
项目社区:https://github.com/mhtshhp/multitask

开源协议:MIT License

下载


Multitask

Build Status
Go Report Card
GoDoc

Multi task for golang

Features

  • Support multitasking efficiently.
  • Flexible and easy to use, easy to use

Usage

See more at Example.

  1. package main
  2. import (
  3. "errors"
  4. "fmt"
  5. "github.com/mhtshhp/multitask"
  6. "time"
  7. )
  8. func dosamething0() (interface{}, error) {
  9. // dosamething
  10. time.Sleep(time.Second)
  11. return nil, nil
  12. }
  13. func dosamething1() (interface{}, error) {
  14. // dosamething
  15. time.Sleep(2 * time.Second)
  16. return nil, nil
  17. }
  18. func dosamething2() (interface{}, error) {
  19. // dosamething
  20. panic(errors.New("unknown error"))
  21. return nil, nil
  22. }
  23. func main() {
  24. var (
  25. results []*multitask.Value
  26. err error
  27. timeout = 100 * time.Millisecond
  28. concurrent = multitask.WithOptionOfQuantityPreExecution(2)
  29. )
  30. // Different calling methods are supported
  31. // single task usage
  32. // 1
  33. results, err = multitask.NewTask(timeout, concurrent).Excute(multitask.WithParamsOfSingleFunc(dosamething0))
  34. if err != nil {
  35. handleError(err)
  36. }
  37. iterator(results)
  38. // multi task usage
  39. // 2
  40. results, err = multitask.NewTask(timeout, concurrent).Excute(multitask.WithParamsOfMultiFunc(dosamething0, dosamething1, dosamething2))
  41. if err != nil {
  42. handleError(err)
  43. }
  44. iterator(results)
  45. // 3
  46. results, err = multitask.NewTask(timeout, concurrent).Excute(multitask.WithParamsOfFuncMap([]multitask.MultitaskFunc{dosamething0, dosamething1, dosamething2}))
  47. if err != nil {
  48. handleError(err)
  49. }
  50. iterator(results)
  51. // 4
  52. fns := make([]multitask.MultitaskFunc, 3)
  53. fns[0] = dosamething0
  54. fns[1] = dosamething1
  55. fns[2] = dosamething2
  56. results, err = multitask.NewTask(timeout, concurrent).Excute(fns)
  57. if err != nil {
  58. handleError(err)
  59. }
  60. iterator(results)
  61. }
  62. func handleError(err error) {
  63. fmt.Printf("[ERROR]:%v \n", err)
  64. }
  65. func iterator(assemble []*multitask.Value) {
  66. for k, v := range assemble {
  67. fmt.Printf("[M][ID]:%d, [ExcutionTime]:%s, [Error]:%v, [DATA]:%v \n", k, v.ExcutionTime, v.Error, v.Data)
  68. }
  69. }

License

Released under the MIT License.