Since there are multiple results needed to be processed ... > On Dec 18, 2018, at 10:02 AM, Robert Engels <reng...@ix.netcom.com> wrote: > > That code is incorrect as well when using buffered channels. > >> On Dec 18, 2018, at 10:00 AM, Skip Tavakkolian <skip.tavakkol...@gmail.com> >> wrote: >> >> why not just drop the select? i think the following is guaranteed because >> putting things on rc has to succeed before putting true into dc: >> >> package main >> >> import ( >> "fmt" >> ) >> >> func do(i int, rc chan<- int, dc chan<- bool) { >> rc <- i >> dc <- true >> } >> >> func main() { >> worker := 10 >> rc := make(chan int, worker) >> done := 0 >> dc := make(chan bool, worker) >> for i := 0; i < worker; i++ { >> go do(i, rc, dc) >> } >> for done < worker { >> r := <-rc >> fmt.Println(r) >> <-dc >> done++ >> } >> } >> >> >>> On Tue, Dec 18, 2018 at 5:35 AM Chris Burkert <burkert.ch...@gmail.com> >>> wrote: >>> Dear all, >>> >>> I have a couple of goroutines sending multiple results over a channel - a >>> simple fan-in. They signal the completion on a done channel. Main selects >>> on the results and done channel in parallel. As the select is random main >>> sometimes misses to select the last result. What would be the idiomatic way >>> to prevent this and completely drain the result channel? >>> >>> Here is a minmal example which sometimes prints one 0 but should always >>> print two of them: >>> >>> package main >>> >>> import ( >>> "fmt" >>> ) >>> >>> func do(rc chan<- int, dc chan<- bool) { >>> rc <- 0 >>> dc <- true >>> } >>> >>> func main() { >>> worker := 2 >>> rc := make(chan int, worker) >>> done := 0 >>> dc := make(chan bool, worker) >>> for i := 0; i < worker; i++ { >>> go do(rc, dc) >>> } >>> for done < worker { >>> select { >>> case <-dc: >>> done++ >>> case r := <-rc: >>> fmt.Println(r) >>> } >>> } >>> } >>> >>> many thanks >>> Chris >>> -- >>> 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. > -- > 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.