srvgit / asyncwork

Run tasks concurrently in golang

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

asyncwork

Execute tasks concurrently in golang.

Install

go get -u github.com/cxww107/asyncwork/worker

Prepare the tasks

The task is a function with following signature:

type TaskFunction func() interface{}

It can be declared like this:

task1 := func() interface{} {
  time.Sleep(time.Second * 4)
  fmt.Println("very slow function")
  return "I'm ready"
}

All task have to be collected into the slice:

tasks := []worker.TaskFunction{task1, task2, task3}

Use context.Context to stop running goroutines

ctx, cancel := context.WithCancel(context.Background())
defer cancel()

Execute the tasks

Start task execution:

resultChannel := worker.PerformTasks(ctx, tasks)

Get result from completed tasks

Loop over the channel with results.

for result := range resultChannel {
  switch result.(type) {
  case error:
    fmt.Println("Received error")
    cancel()
    return
  case string:
    fmt.Println("Here is a string:", result.(string))
  case int:
    fmt.Println("Here is an integer:", result.(int))
  default:
    fmt.Println("Some unknown type ")
  }
}

About

Run tasks concurrently in golang

License:Apache License 2.0


Languages

Language:Go 100.0%