The ran the code on play, seems to come out within 2 seconds. https://play.golang.org/p/yZIAvXI8IX
On Sun, Jan 8, 2017 at 12:53 PM, <desaiabhi...@gmail.com> wrote: > > Can you please help to correct below program where timeout not seems > working > > Work 1 - have 1 second > Work 2 - have 3 second > Total Timeout - 2 sec > > program wait for entire 3 seconds and return both values rather than value > from Work 1 > > Program > > > package main > > import ( > "fmt" > "time" > "sync" > ) > > > type TestStruct struct { > Name string > } > > func main() { > > wg := &sync.WaitGroup{} > messges := make(chan *TestStruct, 1) > > wg.Add(1) > go Work1(messges, wg, "1") > wg.Add(1) > go Work2(messges, wg, "2") > > monitorWorker(wg, messges) > > messgesResponse := make(chan []*TestStruct) > go GetWorkerValues(messges, messgesResponse) > > headers := make([]*TestStruct, 0) > headers = <-messgesResponse > > fmt.Printf("len > %s\n", len(headers)) > > for i:=0;i<len(headers);i++ { > fmt.Printf("Name > %s\n", headers[i].Name) > } > } > > > > func monitorWorker(wg *sync.WaitGroup, cs chan *TestStruct) { > go func() { > defer close(cs) > wg.Wait() > }() > > select { > case <-time.After(2 * time.Second): > return > } > } > func Work1(message chan *TestStruct, wg *sync.WaitGroup, tokenNumber > string) { > defer wg.Done() > > v1 := new(TestStruct) > v1.Name = tokenNumber > time.Sleep(1 * time.Second) > > message <- v1 > fmt.Printf("finished %s\n", tokenNumber) > } > > func Work2(message chan *TestStruct, wg *sync.WaitGroup, tokenNumber > string) { > defer wg.Done() > > v1 := new(TestStruct) > v1.Name = tokenNumber > time.Sleep(1 * time.Second) > > message <- v1 > > fmt.Printf("finished %s\n", tokenNumber) > } > > > func GetWorkerValues(cs <-chan *TestStruct, response chan<- []*TestStruct) > { > var val []*TestStruct > for header := range cs { > val = append(val, header) > } > response <- val > } > > > Thanks, > > Abhi > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.