yes this is what I want.. Need to access web service multiple times to get the entire data unless return status is not "completed" But same time I need timeout
Thanks for the help Thanks Abhi On Sunday, August 6, 2017 at 7:48:05 PM UTC+5:30, snmed wrote: > > I still no get the idea behind your requirement, in your example you > calling the web service 6 times in sequential manner and then write it to > the channel. > But again you can only write once to a channel with a capacity of one, as > long as you not read from the same channel and you still read it in the > select statement. > That means all other calls to 'GetPartWebServiceData()' in the goroutine > are blocked until that read in the select statement happens. In your case > it is always the first > value written to the channel. > > I try to give you a solution with although i'm not completely understand > your requirements: > > Here a working sequential solution: https://play.golang.org/p/2qohwIjP96 > > I hope that helps > > Cheers snmed > > Am Sonntag, 6. August 2017 13:05:11 UTC+2 schrieb Abhijit Desai: >> >> Requirement is to collect the data with in cuttoff time say 3 sec by >> invoking web service multiple times and return only latest invoked data >> >> c1 <- "result 1" // In real scenario this taking almost 1 seconds as in >> real scenario it's taking Part chunk of data from Web Service >> >> Something like... Expecting data from c1 <- >> GetPartWebServiceData("request 3") //at least I should get this data!? >> >> >> package main >> >> import "time" >> import "fmt" >> >> func main() { >> >> c1 := make(chan string, 1) >> >> go func() { >> >> c1 <- GetPartWebServiceData("request 1") //say try 6 times >> c1 <- GetPartWebServiceData("request 2") >> c1 <- GetPartWebServiceData("request 3") //at least I should get >> this data!? >> c1 <- GetPartWebServiceData("request 4") >> c1 <- GetPartWebServiceData("request 5") >> c1 <- GetPartWebServiceData("request 6") >> }() >> >> select { >> case res := <-c1: //here program get out without waiting 3 >> seconds because it got the data >> fmt.Println(res) >> case <-time.After(time.Second * 4): >> fmt.Println("timeout") >> } >> } >> >> func GetPartWebServiceData(request string) string{ >> time.Sleep(time.Second * 1) // Time Consuming work returning part >> value >> partResponse := "Response for " + request //some response >> return partResponse >> } >> >> >> >> On Sunday, August 6, 2017 at 4:03:08 PM UTC+5:30, snmed wrote: >>> >>> Hi >>> >>> What are you trying to solve? Your channel has a capacity of 1, the >>> first write to c1 is successful but the second write to c1 is blocked until >>> it has been read in the select statement. And therefore you print the first >>> value written to c1. >>> >>> I recommend you to read this >>> https://golang.org/doc/effective_go.html#channels documentation about >>> channels. >>> >>> Cheers snmed >>> >>> -- 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.