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 [email protected].
For more options, visit https://groups.google.com/d/optout.