Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "sync"
- "time"
- )
- type job func(out chan interface{})
- var executePipeline = func(jobs ...job) chan interface{} {
- out := make(chan interface{})
- wg := &sync.WaitGroup{}
- for _, j := range jobs {
- wg.Add(1)
- go func(j job) {
- j(out)
- wg.Done()
- }(j)
- }
- go func() {
- wg.Wait()
- close(out)
- }()
- return out
- }
- func main() {
- start := time.Now()
- rr := executePipeline(func(out chan interface{}) {
- time.Sleep(time.Millisecond * 100)
- out <- "1"
- }, func(out chan interface{}) {
- time.Sleep(time.Millisecond * 200)
- out <- "2"
- }, func(out chan interface{}) {
- time.Sleep(time.Millisecond * 300)
- out <- "3"
- }, func(out chan interface{}) {
- time.Sleep(time.Millisecond * 400)
- out <- "4"
- })
- for r := range rr {
- fmt.Println(r.(string))
- }
- fmt.Printf("time since start: %v \n", time.Since(start))
- }
Advertisement
Add Comment
Please, Sign In to add comment