Execute tasks concurrently in golang.
go get -u github.com/nbys/asyncwork/workerThe task is a function with following signature:
typeTaskFunctionfunc() 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())
defercancel()Start task execution:
resultChannel:=worker.PerformTasks(ctx, tasks)Loop over the channel with results.
forresult:=rangeresultChannel {
switchresult.(type) {
caseerror:
fmt.Println("Received error")
cancel()
returncasestring:
fmt.Println("Here is a string:", result.(string))
caseint:
fmt.Println("Here is an integer:", result.(int))
default:
fmt.Println("Some unknown type ")
}
}