Thanks for the reply Sairam
Problem is if I change Work2 time => 3 sec then that work should get
timeout but program still returning it
func Work2(message chan *TestStruct, wg *sync.WaitGroup, tokenNumber
string) {
defer wg.Done()
v1 := new(TestStruct)
v1.Name = tokenNumber
time.Sleep(3 * time.Second)
message <- v1
fmt.Printf("finished %s\n", tokenNumber)
}
Rgds,
Abhi
On Sun, Jan 8, 2017 at 1:39 PM, Sairam Kunala <[email protected]>
wrote:
> 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, <[email protected]> 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 [email protected].
>> 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 [email protected].
For more options, visit https://groups.google.com/d/optout.