Skip to content

Latest commit

 

History

History
47 lines (37 loc) · 823 Bytes

worker-pool__light.md

File metadata and controls

47 lines (37 loc) · 823 Bytes

Worker pool with no limit on workers

package main

import (
	"fmt"
	"time"
)

type Fn func() (interface{}, error)
type Response struct {
	Data interface{}
	Error error
}

func main() {
	var resultsChan = make(chan Response)
	var results = []Response{}
	var jobs = []int{2, 1 ,4} // some data that need to be passed to function
	var jobsLen = len(jobs)

	for _, i := range jobs {
		i := i

		go func() { 
			result, err := someComputing(i) 
			resultsChan <- Response{ Data: result, Error: err }
		}() 

	}

	for j := 1; j <= jobsLen; j++ {
		var res = <-resultsChan
		fmt.Println(res)
		results = append(results, res)
	}
	close(resultsChan)

  fmt.Println(results)
}

func someComputing(delay int) (string, error) {
	time.Sleep(time.Second*time.Duration(delay))
	return fmt.Sprintf("result %d", delay), nil
}